1 Star 0 Fork 0

pcd / ThePoolofDevelop

加入 Gitee
与超过 600 万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
Qt.txt 1.60 KB
一键复制 编辑 Web IDE 原始数据 按行查看 历史
QT的坑:
1、使用信号槽传递自定义类型时,需要在入口处通过Q_DECLARE_METATYPE与qRegisterMetaType注册类型(也可在类声明后注册),
但是注意:当类型为QObject时,不要使用Q_DECLARE_METATYPE(Type),仅使用Q_DECLARE_METATYPE(Type*)。
原因:该宏使用了类型的默认构造T(*static_cast<const T*>(t)) 而该构造在QObject中已被隐藏。
2、如果需要反射方法,使用Q_INVOKABLE关键字修饰。若需要反射类,使用qRegisterMetaType注册,才能用QMetaType获取到ID。
3、如果不想每次都在入口添加qRegisterMetaType注册类型,可在类中加入静态id字段,
并在类的实现中使用qRegisterMetaType注册类并给id赋值(可添加多个id表示值类型与引用类型)。
如:qRegisterMetaType<StreamData>("StreamData"); qRegisterMetaType<StreamData>("StreamData&");
4、字符串char * 与QString的转换。
QString str;
char* ch;
QByteArray ba = str.toLatin1(); // 必须要这一行,不能写成ch=str.toLatin1().data(); 结果不正确。
ch=ba.data();
5、 当一个 QObject 对象在堆上创建的时候,
Qt 会同时为其创建一个对象树。不过,对象树中对象的顺序是没有定义的。
这意味着,销毁这些对象的顺序也是未定义的。Qt 保证的是,任何对象树中的 QObject 对象 delete 的时候,
如果这个对象有 parent,则自动将其从 parent 的 children() 列表中删除;如果有孩子,
则自动 delete 每一个孩子。Qt 保证没有 QObject 会被 delete 两次,这是由析构顺序决定的。

评论 ( 0 )

你可以在登录后,发表评论

C/C++
1
https://gitee.com/andwp/ThePoolofDevelop.git
git@gitee.com:andwp/ThePoolofDevelop.git
andwp
ThePoolofDevelop
ThePoolofDevelop
master

搜索帮助

105716 1d94204e 1850385 105716 2d26be5c 1850385