您的位置:首页 > 编程语言 > Qt开发

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信号和槽以结构体为参数传递复杂数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: