QT 信号与槽的初步理解

server/2024/9/23 9:24:46/

信号究竟是由谁发出的?

当MainWindow1中的某个button点击触发了clicked事件,这个信号是由ui->button发出的
...connect(ui->button, SIGNAL(clicked()), this, SLOT(example_slot()));...void MainWindow::example_slot() {//do something
}
当同时存在两个窗口时:

观察动作:

MainWindow2中的button点击后触发槽函数向MainWindow1发送信号

button点击触发的信号是clicked,槽函数间接向MainWindow1发送信号:

...connect(ui->button, SIGNAL(clicked()), this, SLOT(example_slot()));...void MainWindow::example_slot()
{emit signal_example();
}

所以真正的sender是MainWindow2的实例,而不是MainWindow2的button

在MainWindow1中槽函数绑定应该这样写:

connect(&MainWindow2,SIGNAL(signal_example()),this,SLOT(example2_slot()));

总结:

直接信号源:

当MainWindow1中的某个按钮(例如ui->button)被点击时,该按钮直接发出了clicked()信号。这个信号是由按钮这个QWidget(继承自QObject)实例直接发出的。

使用connect(ui->button, SIGNAL(clicked()), this, SLOT(example_slot()));将按钮的clicked()信号连接到当前类(假设为MainWindow1)的example_slot()槽函数。

间接信号源:

在MainWindow2中,同样有一个按钮的点击触发了example_slot()槽函数。在这个槽函数内部,通过emit signal_example();发出了自定义信号signal_example()。

这个自定义信号signal_example()是由MainWindow2这个QObject派生的实例发出的,而不是由按钮直接发出。按钮仅仅是触发了这一过程。

信号的具体发出者:


信号总是由QObject派生的具体实例发出。无论信号是直接由控件(如按钮)发出,还是间接由包含这些控件的窗口类发出。

信号和槽的连接:

信号和槽的连接必须指明具体的信号发送者和信号接收者,这些都是QObject的实例。正确设置这些连接是确保信号能正确传达到预期接收者并触发相应槽函数的关键。
 


http://www.ppmy.cn/server/38179.html

相关文章

志邦家居流程项目中心负责人郑瑶瑶受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 志邦家居股份有限公司流程项目中心负责人、战略及变革委员会秘书长郑瑶瑶女士受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“PMO在制造企业的标准化建设之路”。大会将于6月29-30日在北京举办,敬请关注&…

【爬虫】使用parse_qs函数来将查询字符串转换成字典

在Python中,可以使用urllib.parse模块中的parse_qs函数来将查询字符串转换成字典。下面是一个例子: from urllib.parse import parse_qs # 查询字符串 query_string "appId5053&cityCode110100&t1715150256145&pageIndex1&pageSi…

【SQL基础】mysql中如何将日期时间类型转换为日期类型

在MySQL中,将DATETIME类型的数据转换为日期格式可以通过使用DATE()函数来实现。DATE()函数可以从DATETIME或TIMESTAMP类型的值中提取出日期部分。 以下是几种将DATETIME转换为日期格式的示例: 直接转换DATETIME列为日期: SELECT DATE(date…

Linux中gitlab-runner部署使用备忘

环境: 操作系统::CentOS8 gitlab版本:13.11.4 查看gitlab-runner版本 可以从https://packages.gitlab.com/app/runner/gitlab-runner/search找到与安装的gitlab版本相近的gitlab-runner版本以及安装命令等信息,我找到与13.11.4相…

【Linux 性能详解】CPU性能分析工具篇

目录 uptime mpstat 实时监控 查看特定CPU核心 pidstart 监控指定进程 组合多个监控类型 监控线程资源 按用户过滤进程 vmstart 用途 基本用法 输出字段 perf execsnoop dstat 通俗解释 技术层面解释 使用示例 总结 uptime uptime 是一个在 Linux 和 Unix…

线程传参、线程ID

传递临时对象作线程参数 #include<ioatream> #include<thread> using namespace std; void nowork(const int& a) {cout<<huyanluanyu<<endl; } int main() {int a677;thread newdozer(nowork,a);newdozer.detach(); } 向新创建的线程中传递参数…

DI-engine强化学习入门(九)环境包裹器(Env Wrapper)

在强化学习中&#xff0c;环境&#xff08;Environment&#xff09;是智能体&#xff08;Agent&#xff09;进行学习和互动的场所&#xff0c;它定义了状态空间、动作空间以及奖励机制。Env Wrapper&#xff08;环境包装器&#xff09;提供了一种方便的机制来增强或修改原始环境…

微信小程序开发,构建NPM报错解决

报错信息如下&#xff1a; message&#xff1a; NPM packages not found. Please confirm npm packages which need to build are belong to miniprogramRoot directory. Or you may edit project.config.jsons packNpmManually and packNpmRelationList appid: wx7144a5d5411…