前言:介绍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:
    );
    ~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:
    );
    ~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/

最新文章

  1. php环境的搭建
  2. CentOS7下安装chrome浏览器
  3. SQL update join on 连接更新
  4. C++之路进阶——codevs1789(最大获利)
  5. sublime Text 2 制表符
  6. go语言条件语句 if else
  7. ASP CDONTS.NEWMAIL组件发送电邮(附下载)
  8. ASP.NET MVC简单编程之(二)经典路由篇
  9. Directx11教程(14) D3D11管线(2)
  10. 2016年10月31日 星期一 --出埃及记 Exodus 19:16
  11. [转] AC自动机详解
  12. SDOI2016 R1 解题报告 bzoj4513~bzoj4518
  13. VNC配置
  14. ReactiveCocoa的学习内容
  15. C#连接mysql数据库的一个例子和获取本机IP的方法
  16. Java Insets获取窗口的顶、底、左、右的大小
  17. MATLAB 程序处理结果出现 NAN 问题
  18. PythonStudy——如何使输出不换行
  19. &lt;转&gt;cookie和session的区别
  20. iOS原生和React-Native之间的交互2

热门文章

  1. 利用JavaScript的%读分秒
  2. ES: 机器学习、专家系统、控制系统的数学映射
  3. css3 y轴翻转效果
  4. Multitier architecture-n-tier architecture
  5. ZBrush 2018软件安装激活教程一点通
  6. 认识优动漫PAINT,优动漫PAINT基本功能有哪些?
  7. Javase 集合1
  8. Nginx负载均衡health_check分析
  9. CF140E New Year Garland (计数问题)
  10. windows电脑配置耳机只有一个耳朵响