Qt5中通过信号槽传递多个参数

来源:互联网 发布:删除表数据 sql 编辑:程序博客网 时间:2024/04/30 18:56

在Qt中的信号槽机制中,信号能携带的参数最多不超过6个。那么超过6个时怎么办呢?

这时,可以使用QByteArray作为参数,把需要传递的参数全部打包到这一个参数里,在槽函数里再将打包的参数逐项解析出来。

信号发送:

void signal_msg11001SearchPeople(QByteArray datagram);
void SearchFriends::slot_btnSearchClicked(){    QByteArray datagram;    QDataStream out(&datagram,QIODevice::WriteOnly);       out<<(quint8)cmbSex->currentIndex()       <<(quint8)cmbAge->currentIndex()       <<(quint8)cmbNation->currentIndex()       <<(quint8)cmbProvince->currentIndex()       <<(quint8)cmbCity->currentIndex()       <<(QString)edtKeyword->text().trimmed();    emit signal_msg11001SearchPeople(datagram);}

信号接收:

void MySocket::slot_msg11001SearchPeople(QByteArray datagram){    qDebug()<<"slot_msg11001SearchPeople";    //首先从datagram参数里提取出要发送的各个字段数据    quint8 sex;    quint8 age;    quint8 nation;    quint8 province;    quint8 city;    QString keyword;    QDataStream in(&datagram,QIODevice::ReadOnly);    in.setVersion(QDataStream::Qt_5_3);    in>>sex            >>age            >>nation            >>province            >>city            >>keyword;    qDebug()<<"sex"<<sex;    qDebug()<<"age:"<<age;    qDebug()<<"nation:"<<nation;    qDebug()<<"province:"<<province;    qDebug()<<"city:"<<city;    qDebug()<<"keyword:"<<keyword;}

注,此处由于参数中最后一个QString类型只有一个,直接解析到一个QString变量即可。如果有连续的2个以上的QString变量,则需要先读取4字节的表示长度的数据,然后截取该长度的数据填充到QString变量,余下的变量以此类推。

运行截图:



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 忘记xp登录密码怎么办 华硕密码忘记了怎么办 电脑账户已停用怎么办 鼠标灯亮不动怎么办 电脑用户名被停用怎么办 电脑截图不清晰怎么办 win10电脑磁盘空间不足怎么办 我的用户名忘记怎么办 12306用户名密码忘记怎么办 电脑开机要密码怎么办 三星账户忘记了怎么办 电脑账户忘记了怎么办 电脑启动要密码怎么办 电脑用户密码忘记了怎么办 微信语音听不懂怎么办 法院迟迟不立案怎么办 dns连不上网怎么办 监控显示无硬盘怎么办 电脑获取不到dns怎么办 打游戏cpu过高怎么办 注册了公司没做账怎么办 工行u盾没电了怎么办 属狗和属鸡相害怎么办 被别人说老实怎么办 牛手术后低烧怎么办 按摩把腿按肿了怎么办 吃感冒药特别困怎么办 剖腹产平躺腰疼怎么办 早餐店没生意怎么办 摆小吃摊没生意怎么办 早餐生意不好做怎么办 小吃车不让出摊怎么办 淘宝订单消失了怎么办 工厂搬迁托着不处理怎么办 电磁炉不识别锅怎么办 冰箱电线不够长怎么办 成品衣柜不到顶怎么办 安迪达斯实体店授权书怎么办 松木家具变黄怎么办 松木家具味大怎么办 摆摊卖对联刮风怎么办