QT 信号和槽 多对一关联示例,多个信号,一个槽函数响应,多个信号源如何绑定一个槽函数

devtools/2024/9/24 19:13:47/

三个顾客 Anderson、Bruce、Castiel 都要订饭,分别对应三个按钮,点击一个按钮,就会弹出给该顾客送饭的消息。注意这个例子只使用一个槽函数,而三个顾客名称是不一样的,弹窗时显示的消息不一样,这需要一些 技巧,下面我们开始这个示例的学习。

编辑好界面之后保存。这样三个信号的源头就设置好了,下面需要编写接收它们信号的槽函数。我们回到 QtCreator 的代码编辑模式,打开头文件 widget.h,向类里添加槽函数声明:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();public slots:   //添加槽函数进行弹窗void FoodIsComing();private:Ui::Widget *ui;
};#endif // WIDGET_H

 FoodIsComing 就是我们需要添加的槽函数,添加好声明之后,下面再向 widget.cpp 添加代码:

#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
#include <QDebug>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);//三个按钮的信号都关联到 FoodIsComing 槽函数connect(ui->pushButtonAnderson, SIGNAL(clicked()), this, SLOT(FoodIsComing()));connect(ui->pushButtonBruce, SIGNAL(clicked()), this, SLOT(FoodIsComing()));connect(ui->pushButtonCastiel, SIGNAL(clicked()), this, SLOT(FoodIsComing()));
}Widget::~Widget()
{delete ui;
}void Widget::FoodIsComing()
{//获取信号源头对象的名称QString strObjectSrc = this->sender()->objectName();qDebug()<<strObjectSrc; //打印源头对象名称//将要显示的消息QString strMsg;//判断是哪个按钮发的信号if( "pushButtonAnderson" == strObjectSrc ){strMsg = tr("Hello Anderson! Your food is coming!");}else if( "pushButtonBruce" == strObjectSrc ){strMsg = tr("Hello Bruce! Your food is coming!");}else if( "pushButtonCastiel" == strObjectSrc ){strMsg = tr("Hello Castiel! Your food is coming!");}else{//do nothingreturn;}//显示送餐消息QMessageBox::information(this, tr("Food"), strMsg);
}

 


http://www.ppmy.cn/devtools/47166.html

相关文章

golang协程(go)与信道(chan)使用示例

函数定义 // 普通函数 func f(from string) {//输出三次传入的字符串for i : 0; i < 50; i {fmt.Println(from, ":", i)} } 协程调用 //使用go协程调用函数go f("go routines > Hello World") 局部函数go协程使用 //使用协和调用临时函数go fun…

内存池(Memory Pool)

内存池&#xff08;Memory Pool&#xff09; 内存池&#xff08;Memory Pool&#xff09;是一种内存管理技术&#xff0c;主要用于优化程序中动态内存分配和释放的效率&#xff0c;减少内存碎片&#xff0c;提高程序运行速度。以下是内存池的一些关键概念和工作原理介绍&#…

【AI大模型】Transformers大模型库(七):单机多卡推理之device_map

目录​​​​​​​ 一、引言 二、单机多卡推理之device_map 2.1 概述 2.2 自动配置&#xff0c;如device_map"auto" 2.3 手动配置&#xff0c;如device_map"cuda:1" 三、总结 一、引言 这里的Transformers指的是huggingface开发的大模型库&#x…

Unity 实现WebSocket 简单通信——客户端

创建连接 ClientWebSocket socket new ClientWebSocket(); string url $"ws://{ip}:{port}"; bool createUri Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out Uri uri); if (createUri) {var task socket.ConnectAsync(uri, CancellationToken.None);task…

远程医疗平台如何连接医生和患者?

远程医疗平台&#xff0c;以其创新的信息技术手段&#xff0c;构筑了一个无视地理界限的医疗服务新体系&#xff0c;实现了医患之间的实时互动和诊疗服务。例如欣九康诊疗系统&#xff0c;通过一系列功能模块&#xff0c;有效连接了医生与患者&#xff0c;为两者提供了一个全面…

MFC设置窗口在Z轴上的位置

函数原型&#xff1a; BOOL CWnd::SetWindowPos(const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags);返回值&#xff1a; 如果函数成功&#xff0c;则返回非零值&#xff1b;否则返回0。 参数&#xff1a; pWndInsertAfter&#xff1a;标识了在Z轴次…

Linux - 深入理解/proc虚拟文件系统:从基础到高级

文章目录 Linux /proc虚拟文件系统/proc/self使用 /proc/self 的优势/proc/self 的使用案例案例1&#xff1a;获取当前进程的状态信息案例2&#xff1a;获取当前进程的命令行参数案例3&#xff1a;获取当前进程的内存映射案例4&#xff1a;获取当前进程的文件描述符 /proc中进程…

【稳定检索/投稿优惠】2024年智慧金融与财务管理国际会议(SFFM 2024)

2024 International Conference on Smart Finance and Financial Management 2024年智慧金融与财务管理国际会议 【会议信息】 会议简称&#xff1a;SFFM 2024 截稿时间&#xff1a;以官网为准 大会地点&#xff1a;中国广州 会议官网&#xff1a;www.iacsffm.com 会议邮箱&am…