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

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

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

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    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 nothing
        return;
    }
    //显示送餐消息
    QMessageBox::information(this, tr("Food"), strMsg);
}

 

相关推荐

  1. Qt 遍历按钮单击信号带参数,一个

    2024-06-08 06:44:02       31 阅读
  2. QT信号重载

    2024-06-08 06:44:02       25 阅读
  3. 信号(Qt)

    2024-06-08 06:44:02       26 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-08 06:44:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-08 06:44:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-08 06:44:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-08 06:44:02       18 阅读

热门阅读

  1. Linux基于V4L2的视频捕捉

    2024-06-08 06:44:02       8 阅读
  2. Unity3D DOTS 10W GPU Intancing 动画与合批优化详解

    2024-06-08 06:44:02       8 阅读
  3. Excel中的SUMPRODUCT函数:使用方法与案例分析

    2024-06-08 06:44:02       8 阅读
  4. 【MyBatisPlus条件构造器】

    2024-06-08 06:44:02       8 阅读
  5. [DT] 翻译笔记

    2024-06-08 06:44:02       6 阅读
  6. uniapp vue 隐藏button的边框

    2024-06-08 06:44:02       9 阅读
  7. 零、测试开发前置知识

    2024-06-08 06:44:02       8 阅读
  8. 【常用工具系列】Git 教程——从入门到大师

    2024-06-08 06:44:02       11 阅读
  9. Freemarker

    2024-06-08 06:44:02       8 阅读
  10. MySQL学习——获取数据库和表格的信息

    2024-06-08 06:44:02       10 阅读
  11. solidity的modifier修饰符

    2024-06-08 06:44:02       8 阅读