Qt:信号槽机制传递复杂类型参数(窗口通信)
2016-06-03 21:44
921 查看
通过Qt的带参信号可以很方便实现参数传递。但有一个问题,一般定义的信号都只有一到两个参数。如果你想传递很多参数时候会出现限制,当然你也可以让你定义的信号带多个参数,但那必然是很繁琐的事情且代码会显得很臃肿。解决这种复杂参数传递的一个思路就是实现一个容器来装载多个参数。在Qt中QMap就是一个很好用的容器来实现多参数传递,这是一个关联容器。通常定义其键值对类型为<QString,QVariant>. 用QString作为索引号可以方便我们寻找相对应的值,QVariant可以保存各种不同类型的数据对象。在Qt的QSetting类中数据保存的数据结构就是QMap<QString,QVariant>.这种数据结构可以一任意方式组织数据
一个例子如下:
QMap<QString,QVariant> pearMap;
pearMap["Standard"]=1.95;
pearMap["Organic"]=2.25;
QMap<QString,QVariant> fruitMap;
fruitMap["orange"]=2.10;
fruitMap["apple"]=3.85;
fruitMap["Pear"]=pearMap; 这组织起一个很复杂的数据结构。但这种数据结构大量的使用了QVariant类,QVariant的变量是以降低可读性和效率为代价的。这是使用这种方法的一个缺陷。
另一个方法:在C/C++中我们可以定义一个结构体来将我们需要的数据类型组合起来。然后在已该结构体传作为参数传递。在Qt中使用结构体 要进行注册,具体的内容见下面的引用文献:
QT信号和槽以结构体为参数传递复杂数据
一个例子如下:
QMap<QString,QVariant> pearMap;
pearMap["Standard"]=1.95;
pearMap["Organic"]=2.25;
QMap<QString,QVariant> fruitMap;
fruitMap["orange"]=2.10;
fruitMap["apple"]=3.85;
fruitMap["Pear"]=pearMap; 这组织起一个很复杂的数据结构。但这种数据结构大量的使用了QVariant类,QVariant的变量是以降低可读性和效率为代价的。这是使用这种方法的一个缺陷。
另一个方法:在C/C++中我们可以定义一个结构体来将我们需要的数据类型组合起来。然后在已该结构体传作为参数传递。在Qt中使用结构体 要进行注册,具体的内容见下面的引用文献:
QT信号和槽以结构体为参数传递复杂数据
相关文章推荐
- Qt 预编译头文件(precompiled headers) 加快编译速度
- linux Qt Creator 代码编辑器中常用快捷键失效的原因
- QT program tips
- Qt学习笔记01
- qt博客
- qt获取”本地连接“的IP
- QT中PRO文件写法的详细介绍!
- qt-使用vs2012调试qt程序
- 关于Qt窗口之间的传值问题
- Qt信号槽机制源码学习
- Window 下 Qt5 使用QMediaplayer 进行视频播放 流播放问题
- QT moc 学习小结
- Qt中文手册 之 QTreeWidgetItem
- Qt 程序打包发布
- Qt 读写配置文件ini
- MQTT开发笔记之《安全传输-自问自答》
- Qt creator正常使用过程中崩溃
- 一个可视频语音的软件原型
- (转载)Qt 的线程与事件循环——可打印threadid进行观察槽函数到底是在哪个线程里执行,学习moveToThread的使用)
- QT入门 udp发送