如何在Qt中使用自定义数据类型 (zz)
来源:互联网 发布:淘宝店被关可以重开 编辑:程序博客网 时间:2024/04/29 19:14
这里我们使用下面这个struct来做说明(这里不管是struct还是class都一样):QVariant
为了能在QVariant中使用自定义数据类型做,需要使用Q_DECLARE_METATYPE()来向Qt的元系统声明这个自定义类型。如下列所示:在作为QVariant传递自定义数据类型时,需要使用QVariant::fromValue()或者qVariantFromValue:为了更方便一点,你可以在自定义类型中定义一个QVariant() 类型转换符:这样我们便可以像下面这样使用了:信号和槽
对于直接连接类型(默认情况下就是直接连接)而言,使用自定义数据类型做信号参数不需要做其他其他处理,就像内置数据类型一样:但在跨线程时如果你还这么做,编译器就会给出警告了:这时我们需要先注册Player:QDebug
最好是能这样:而不是这样:怎么做呢?我们需要对QDebug<<操作符重载一下:QDataStream
跟上面的QDebug很像,我们也需要重载一下<<操作符:QSettings
为了能在QSettings中使用自定义数据类型,需要让Qt的元系统知道有此类型,就像上面介绍QVariant部分一样,另外还要提供相应的QDataStream操作符,还必须注册这个流操作符:如此处理之后我们就可以像下面这样使用了:
- struct Player
- {
- int number;
- QString firstName;
- QString lastName;
- };
为了能在QVariant中使用自定义数据类型做,需要使用Q_DECLARE_METATYPE()来向Qt的元系统声明这个自定义类型。如下列所示:
- struct Player
- {
- ...
- };
- Q_DECLARE_METATYPE(Player);
- Player player;
- object->setProperty("property", QVariant::fromValue(player));
- struct Player
- {
- ...
- operator QVariant() const
- {
- return QVariant::fromValue(*this);
- }
- };
- Player player;
- object->setProperty("property", player);
对于直接连接类型(默认情况下就是直接连接)而言,使用自定义数据类型做信号参数不需要做其他其他处理,就像内置数据类型一样:
- connect(sender, SIGNAL(playerCreated(const Player&)), receiver, SLOT(addPlayer(const Player&)));
- QObject::connect: Cannot queue arguments of type 'Player'
- (Make sure 'Player' is registered using qRegisterMetaType().)
- qRegisterMetaType<Player>("Player");
- connect(sender, SIGNAL(playerCreated(const Player&)), receiver, SLOT(addPlayer(const Player&)));
最好是能这样:
- qDebug() << player;
- qDebug() << "Player(" << player.number << "," << player.firstName << "," << player.lastName << ")";
- inline QDebug operator<<(QDebug debug, const Player& player)
- {
- debug.nospace() << "Player("
- << player.number << ","
- << player.firstName << ","
- << player.lastName << ")";
- return debug.space();
- }
跟上面的QDebug很像,我们也需要重载一下<<操作符:
- inline QDataStream& operator<<(QDataStream& out, const Player& player)
- {
- out << player.number;
- out << player.firstName;
- out << player.lastName;
- return out;
- }
- inline QDataStream& operator>>(QDataStream& in, Player& player)
- {
- in >> player.number;
- in >> player.firstName;
- in >> player.lastName;
- return in;
- }
为了能在QSettings中使用自定义数据类型,需要让Qt的元系统知道有此类型,就像上面介绍QVariant部分一样,另外还要提供相应的QDataStream操作符,还必须注册这个流操作符:
- qRegisterMetaTypeStreamOperators<Player>("Player");
- QSettings settings;
- Player player;
- settings.setValue("key", player);
- QSettings settings;
- Player player = value("key").value<Player>();
- 如何在Qt中使用自定义数据类型 (zz)
- 如何在Qt中使用自定义数据类型
- 如何在Qt中使用自定义数据类型
- 如何在Qt中使用自定义数据类型
- 如何在Qt中使用自定义数据类型
- 如何在VC中使用DEBUG(ZZ)
- Qt-信号和槽中使用自定义数据类型
- Qt-信号和槽中使用自定义数据类型
- Qt在QTableView中使用自定义委托
- golang(cgo)---如何在两个不同的package中使用同样的自定义数据类型?
- 在VS2005中如何使用AfxMessageBox及TextOut(zz)
- 请教如何在QT自定义线程类中使用QTimer定时器功能
- QT中如何在ComboBox中设置存放自定义类型
- QT中如何在QListWidget中添加自定义的 tiem
- 在Qt 中如何使用OpenCV库
- 如何在QT环境中使用openCV
- 如何在Qt中使用boost库
- 小谈C语言中常见数据类型在32及64位机上的使用(zz)
- 从谷歌宕机事件认识互联网工作原理
- 独立游戏开发者易犯的9大致命错误
- 使用标准文件流操作文件
- 为什么C语言的同一个文件中可以定义两个接口完全相同的函数?
- Linux下网络配置总结
- 如何在Qt中使用自定义数据类型 (zz)
- 域问题导致配置用户不能链接数据库
- VirtualBox开启显卡3D加速
- 高清步入网络,数字改变生活
- 漂亮的淘宝客单页模版,简单大气
- swftools,在ubuntu linux下的安装
- Oracl基本操作SQL
- WTL中的窗口消息传递
- 文件Cache处理