Qt-信号和槽-多对多
Posted chendeqiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt-信号和槽-多对多相关的知识,希望对你有一定的参考价值。
前言:介绍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/
以上是关于Qt-信号和槽-多对多的主要内容,如果未能解决你的问题,请参考以下文章