前言: 介绍 1 对多, 多对 1 以及多对多的案例.
一, 1 对多
演示内容: 在 QLineEdit 输入时, 同步 label,text browser 以及调试输出板同步显示.
1.1 新建工程
1.2 添加部件
拖入 line Edit,Label 和 Text Browser 标签
1.3 修改文件
修改 widget.h 头文件
- namespace Ui {
- class Widget;
- }
- class Widget : public QWidget
- {
- Q_OBJECT
- public:
- explicit Widget(QWidget *parent = 0);
- ~Widget();
- public slots: // 添加槽函数打印调试信息
- void PrintText(const QString& text);
- private:
- Ui::Widget *ui;
- };
修改 widget.cpp 文件
- #include "widget.h"
- #include "ui_widget.h"
- #include <QDebug> //qDebug 函数需要的头文件
- Widget::Widget(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::Widget)
- {
- ui->setupUi(this);
- connect(ui->lineEdit, SIGNAL(textEdited(QString)), ui->label, SLOT(setText(QString)));// 将 lineEdit 的编辑信号关联到 label 的设置文本槽函数;
- connect(ui->lineEdit, SIGNAL(textEdited(QString)), ui->textBrowser, SLOT(setText(QString)));// 将 lineEdit 的编辑信号关联到 textBrowser 的设置文本槽函数
- connect(ui->lineEdit, SIGNAL(textEdited(QString)), this, SLOT(PrintText(QString)));// 将 lineEdit 的编辑信号关联到主窗体的 PrintText 槽函数
- }
- Widget::~Widget()
- {
- delete ui;
- }
- void Widget::PrintText(const QString &text)
- {
- qDebug()<<text; // 打印到调试输出面板
- }
1.4 运行
二, 多对 1
演示内容: 三个信号对应一个槽.
2.1 新建项目
2.2 新建部件
拖入三个 button, 并将 ObjectName 分别修改为 pushButtonA,pushButtonB 和 pushButtonC.
2.3 修改文件
在 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
修改 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->pushButtonA, SIGNAL(clicked()), this, SLOT(FoodIsComing()));
- connect(ui->pushButtonB, SIGNAL(clicked()), this, SLOT(FoodIsComing()));
- connect(ui->pushButtonC, SIGNAL(clicked()), this, SLOT(FoodIsComing()));
- }
- Widget::~Widget()
- {
- delete ui;
- }
- void Widget::FoodIsComing()
- {
- // 获取信号源头对象的名称
- QString strObjectSrc = this->sender()->objectName();
- qDebug()<<strObjectSrc; // 打印源头对象名称
- // 将要显示的消息
- QString strMsg;
- // 判断是哪个按钮发的信号
- if( "pushButtonA" == strObjectSrc )
- {
- strMsg = tr("Hello Anderson! Your food is coming!");
- }
- else if( "pushButtonB" == strObjectSrc )
- {
- strMsg = tr("Hello Bruce! Your food is coming!");
- }
- else if( "pushButtonC" == strObjectSrc )
- {
- strMsg = tr("Hello Castiel! Your food is coming!");
- }
- else
- {
- //do nothing
- return;
- }
- // 显示送餐消息
- QMessageBox::information(this,tr("Food"),strMsg);
- }
2.4 运行
-END-
参考自: https://qtguide.ustclug.org/
来源: http://www.bubuko.com/infodetail-2923524.html