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

2023-11-16

在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变量,余下的变量以此类推。

运行截图:



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt5中通过信号槽传递多个参数 的相关文章

  • 在 QtCreator 中查看数组内容

    调试时是否可以在 Qt Creator 中查看数组的内容 似乎检测到我的数组是一个数组而不是一个指针 此外 我可以点击一个箭头 就像展开一样 但之后什么也没有显示 当我试穿的时候std vector Qt Creator 设法按预期显示内容
  • 在 Qt C++ 中使用多个键

    我正在构建 坦克 游戏 我使用关键事件在地图上运行我的坦克 实际上我当时只能使用一把钥匙 但我需要有能力去完成任务 同时向上和离开 这是我的单键事件代码 switch event gt key case Qt Key Up if ui gt
  • 为 Visual Studio 2012 编译 Qt 4.8.x

    我应该采取哪些步骤来编译适用于 Visual Studio 2012 的 Qt 版本 4 8 x 我已经仔细遵循了已接受答案中的说明这个问题 https stackoverflow com questions 5601950 how to
  • 关于 GUI 计时器显示后台线程已用时间的建议?

    Issue 我有一个 PyQt GUI 用户按下按钮即可启动后台线程 workerThread 它是从QThread 我想要一个计时器显示 以QLabel 显示自此以来已经过去了多少时间workerThread开始 我希望这个计时器在wor
  • 将项目添加到自定义组件的布局

    我有一个习惯Footer Component我想在 QML 应用程序的不同位置重用它 Rectangle color gold height 50 anchors bottom parent bottom left parent left
  • 如何在Qt中设置编译器?

    我对 Qt 完全陌生 我下载了离线版本 Qt 5 3 2 for Windows 64 bit VS 2013 OpenGL 573 MB 我无法编译我的项目 I have Qt Creator 3 2 1 开源 基于Qt 5 3 2 MS
  • cx_freeze:QODBC 驱动程序未加载

    我的 python 应用程序如下所示 test py from PyQt4 import QtCore from PyQt4 import QtGui from PyQt4 import QtSql import sys import at
  • Windows 消息循环而不是 QApplication::exec() / QApplication::processEvents()

    我是否想念任何一个Qt如果我替换功能QApplication exec 使用标准 Windows 消息循环实现 这应该可以澄清我的意思 运行事件处理的常用 Qt 方式 int main int argc char argv QApplica
  • QLineEdit:显示处理后的文本,而不是输入的文本,但保留它(自定义回显模式)

    我想要一个QLineEdit不显示输入的文本 而是显示经过处理的版本 同时保留原始文本并在通过请求时返回它text 就像密码回显模式一样 但我不希望每个字符都被屏蔽 我想虚拟化空间 例如什么时候some text with spaces i
  • 如何将图标放置到 QLineEdit 上?

    stackoverflow com 网站的右上角有一个带有放大镜头的搜索字段和一个灰色的 搜索 关键字 我想知道是否有可能实现相同的外观QLineEdit 如果是这样那怎么办 QLineEdit lineEdit new QLineEdit
  • 在 QtCreator 中将 OpenCV 2.3 与 Qt 结合使用

    随着 OpenCV 2 3 版本终于发布 我想在我的系统上编译并安装这个最新版本 由于我经常使用 Qt 和 QtCreator 我当然希望能够在我的 Qt 项目中使用它 我已经尝试了几种方法几个小时 但总是出现错误 第一次尝试 使用WITH
  • 从 QML 实例化 C++ 对象会产生巨大的内存使用开销

    实例化一个QObjectC 堆中的派生类为每个对象提供了大约 160 个字节 通过注册相同的对象qmlRegisterType 用于从 QML 创建并通过以下方式动态创建对象createObject 每个对象给我 2000 多个字节 这是完
  • 仅将非模态 QDialog 窗口放置在我的应用程序顶部,而不是所有应用程序顶部

    我有一个 QDialog 窗口 它应该始终位于我的应用程序顶部 它不是模态的 用户可以随时与对话框和主应用程序进行交互 使用窗口保持在顶部提示在某种程度上实现了这一点 但是 该对话框仍然位于所有其他正在运行的应用程序 例如记事本 chrom
  • 当 QML 对象不可见时防止 QML 属性绑定?

    我正在开发一个具有大量属性绑定的 QML 应用程序 数百个对象被跟踪并以不同的形式显示 例如 Qt3D QCanvas 当我在应用程序的单独页面上时 x y 位置和相对大小的属性绑定仍在发生 我怎样才能阻止他们 我知道我可以根据属性是否可视
  • QSpinBox 输入 NaN 作为有效值

    我正在尝试扩展 QSpinBox 以能够输入 NaN 或 nan 作为有效值 根据文档 我应该使用 textFromValue valueFromText 和 validate 函数来完成此操作 但我无法让它工作 因为它仍然不允许我输入除数
  • 如何在 C++ 和 QML 应用程序中使用 qrc?

    我在 Windows7 上用 c qnd Qt Creator QML 编写了 Qt Quick Desktop 应用程序 现在 我必须部署它 并且我需要隐藏 qml 文件和图像 意味着 将它们放入资源等中 我读到有一个很好的方法可以使用
  • 如何在 C++ 运行时更改 QML 对象的属性?

    我想在运行时更改 QML 对象的文本 我尝试如下 但文本仍然为空 这是后端类 class BackEnd public QObject Q OBJECT Q PROPERTY QString userFieldText READ userF
  • QT/QML Android App,点击通知栏时打开应用程序

    我为 Android 应用程序制作了一个 QT 当我单击平板电脑中上面看到的按钮通知栏时 但是 如果单击通知 我的应用程序将打开 聚焦 不知道 并显示黑色窗口 简单来说怎么做呢 我的代码是 package org ays operation
  • QTextEdit.find() 在 Python 中不起作用

    演示问题的简单代码 usr bin env python import sys from PyQt4 QtCore import QObject SIGNAL from PyQt4 QtGui import QApplication QTe
  • 如何在 Qt 中以编程方式制作一条水平线

    我想弄清楚如何在 Qt 中制作一条水平线 这很容易在设计器中创建 但我想以编程方式创建一个 我已经做了一些谷歌搜索并查看了 ui 文件中的 xml 但无法弄清楚任何内容 ui 文件中的 xml 如下所示

随机推荐

  • 详解JS 和CSS 代码利用率统计利器Coverage以及高版本chrome中coverage的一个致命问题

    在做前端性能测试时较大的文件需要更多时间来下载 并可能导致我们的网站加载缓慢 从而导致用户体验欠佳 因此删除JS和CSS中未被使用的代码就很有必要了 Coverage工具就可以非常方便的实现这一需求 Coverage使用方法 Coverag
  • uniapp打包之配置MacOS虚拟机生成iOS打包证书

    前言 uniapp是一款跨端开发框架 可用于快速开发iOS Android H5等多端应用 本文将详细介绍如何实现uniapp开发的iOS应用打包 详细步骤 一 下载苹果原版镜像文件 点击此处下载 二 安装VMware uniapp打包iO
  • 【android】巧用android:divider属性设置LinearLayout中元素之间的间隔

    如上图 要想实现3个button线性排列并且使它们的大小相同 间隔相等 而且整体填充满整个linearlayout 我们一般的做法是在每两个button之间放一个固定宽度的view 然后设置button的宽度为0 layout weight
  • IDEA maven 项目修改后代码不生效,需要mvn install 后才生效

    错误描述 每次更新完代码 还需要手动install一下才生效 太令人头疼了 错误原因 应该是idea的问题 解决方案 删除idea文件夹 重新打开项目就好了
  • nas linux手机照片备份,本身着手,组建简洁好用的NAS!(存储同步篇)

    之前老张给人人带来了NAS安装 戳这里 和根基设置 戳这里 过程 那么接下来就是正戏了 此次包含了共享设置 速度测试 多盘设置 照片视频同步设置的过程 也是NAS在内网情况中的本职工作 事实要怎么做呢 一路来看看吧 原文来自 www pp0
  • Word文档标题编号调整

    现象 标题目录编号错乱 工具 Word2016 1 先选中第一个一级目录 自定义多级目录样式 包含所有的文档目录级别 1 2 3 4 5 2 将第2章标题下的2级目录标题 2 1环境说明 使用格式刷刷成1级标题中设置的样式 3 选中 第3章
  • Python小游戏————滑雪小游戏代码开源

    作者 小刘在这里 每天分享云计算网络运维课堂笔记 励志爬上IT介顶峰 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 夕阳下 是最美的 绽放 愿所有的美好 再疫情结束后如约而至 目录 一 主代码 二 cfg 三 README
  • Java实现音频播放

    import java io File import java io IOException import javax sound sampled AudioFormat import javax sound sampled AudioIn
  • Day2 Data Management I

    This article is based on R 4 1 2 1 Data import Export 1 1 Import data 1 1 1 import data by base R Example General import
  • jsp向服务器上传文件,jsp ftp 上传文件到服务器

    jsp ftp 上传文件到服务器 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具 将文件上传到云服务器 例如QQ exe 在本地主机和Windows云服务器上分别安装数据传输工具 将文件上传到云服务器
  • 转:java实现 阿拉伯数字转换为汉字数字 算法

    转载链接 http blog csdn net zhanghao hulk article details 28594105 转载代码 public class NumberFormatUtil static String units 十
  • yum使用源安装Nginx

    Nginx 使用源安装 进入源的目录 sudo vim etc yum repos d 创建nginx源文件 touch nginx repo 添加nginx repo配置文件 https nginx org en linux packag
  • git仓库的创建以及连接远程仓库

    供自己后期复习使用 如果哪里不对希望大佬指正 1 先创建远程仓库 2 本地仓库创建以及连接远程仓库 1 配置个人信息 git config global user name 自己git的name git config global user
  • linux下使用 du查看某个文件或目录占用磁盘空间的大小

    du ah max depth 1 这个是我想要的结果 a表示显示目录下所有的文件和文件夹 不含子目录 h表示以人类能看懂的方式 max depth表示目录的深度 du命令用来查看目录或文件所占用磁盘空间的大小 常用选项组合为 du sh
  • 关于云成本管理和优化 FinOps,你需要知道的一切

    FinOps 是什么 FinOps 是一种云成本管理和优化的解决方案 并为组织 企业 团队提供了系统化的方法论 其中每个人都应该对自己的云资源成本负责 FinOps 是 Finance 和 DevOps 的合成词 强调业务团队和研发团队的沟
  • xrd计算晶面间距_origin分析XRD(6.晶格常数计算立方晶系举例)

    微信公众号试行乱序推送 为了不错过更新 请点击本页面最上方的 结构分析表征 进入公众号主页 点击右上角的三个小点点 在弹出的界面点击 设为星标 并在看完图文或视频后点击右下角的 在看 和 赞 本公众号以各类仪器的测试 分析教程 欢迎关注同名
  • Windows10 配置ftp实现局域网文件共享

    准备两台电脑能相互ping通 设置网络共享 控制面板 gt gt 网络和Internet gt gt 网络和共享中心 gt gt 高级共享设置 开启WindowsDefender 防火墙允许FTP文件共享 这里我在自己电脑上没找到FTP的选
  • iOS17适配指南-新版

    文章目录 一 iOS17适配点 二 具体代码 一 iOS17适配点 UIView与UIViewController 可以设置数据为空时的占位视图 增加SymbolAnimations 通过addSymbolEffect 与removeSym
  • Unuty3D开发ai2thor

    一 Edit 用Uinity3D打开ai2thor unity项目进行编辑 二 Build 方法一 1 修改ai2thor目录下的task py文件 注释86 89行 并添加一行Unity3D软件的路径 if os path exists
  • Qt5中通过信号槽传递多个参数

    在Qt中的信号槽机制中 信号能携带的参数最多不超过6个 那么超过6个时怎么办呢 这时 可以使用QByteArray作为参数 把需要传递的参数全部打包到这一个参数里 在槽函数里再将打包的参数逐项解析出来 信号发送 void signal ms