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:
);
~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/
Qt-信号和槽-多对多的更多相关文章
- QT 信号与槽connect
QT 信号与槽connect QT 信号与槽connect connect函数调用几个限制 connect函数代码 QT中信号与槽的连接使用的connect函数是一个静态函数,在类QObject中定义 ...
- Qt 信号与槽
Qt信号与槽的理解 信号和槽机制是 QT 的核心机制,要精通 QT 编程就必须对信号和槽有所了解.信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重 ...
- QT信号和槽
QT信号和槽 ============ 信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性.要正确的处理信号和槽,必须借助一个称为 moc(Meta Object Compiler) ...
- Qt信号与槽自动关联机制
参考链接1:http://blog.csdn.net/skyhawk452/article/details/6121407 参考链接2:http://blog.csdn.net/memory_exce ...
- Qt信号与槽应用实例一
..... connect(m_pGlobelWidget,signal(globeControlClick(object,object)),this,slot(globeControlClick(o ...
- Qt 信号和槽函数
信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性.当某个信号被发射,就需要调用与之相绑定的槽函数.这与Windows下的消息机制类似,消息机制是基于回调函数.一个回调即是一个函数的 ...
- QT 信号与槽连接
转帖 http://www.cnblogs.com/cnhome/archive/2009/10/01/1577277.html 信号(SIGNAL)和槽(SLOT)是Qt编程的一个重要部分.这个机制 ...
- Qt信号和槽的个人总结
1.connect connect(sender,SIGNAL(signal()),receiver,SLOT(slot())); 这里用到了两个宏:SIGNAL() 和SLOT():通过connec ...
- QT 信号与槽 QT简单加法器的实现
信号与槽 背景: 面向过程 模块之间低耦合设计(高内聚). 函数调用: 直接调用 回调调用(低耦合) 面向对象 模块之间低耦合设计(高内聚) 对象调用 直接调用 接口调用 QT: 信号与槽解决问题: ...
- 关于Qt信号与槽机制的传递方向性研究(结论其实是错误的,但是可以看看分析过程)
最近由于项目的需求,一直在研究Qt.信号与槽机制是Qt的一大特色,该机制允许两者间传递参数,依次来实现对象间的通信.这个参数会分别存在于信号的参数列表和槽函数的参数列表中.需要注意的是,若将槽函数绑定 ...
随机推荐
- mysqldump+mydumper+xtrabackup备份原理流程
mysqldump备份原理 备份的基本流程如下: 1.调用FTWRL(flush tables with read lock),全局禁止读写 2.开启快照读,获取此时的快照(仅对innodb表起作用) ...
- 用户 'NT Service\MSSQLServerOLAPService' 登录失败
初学SSAS,部署微软官方示例项目AdventureWorksDW2012Multidimensional时出现错误:用户 'NT Service\MSSQLServerOLAPService' 登录 ...
- CorelDRAW购物节福利开奖 | “剁手节”前的攻略来了,请查收!
距离“剁手节” 还有不到两周的时间 相信一些线上.线下.微商.电商...都拿出了看家本领进行市场混战 一场没有硝烟的战争开始啦!! …… 当然,我也不例外 你们谁都别拦着,我要打广告了 让你变成了不折 ...
- 跳出语句 break continue
break 使用场景:终止switch或者循环 在选择结构switch语句中 在循环语句中 离开使用场景的存在是没有意义的 public static void main(String[] args) ...
- JS 用+1、-1填12()34()56()78()9=59
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 实验一:JAVA实验环境搭建 ,JDK下载与安装及 Eclipse下载与安装
一.搭建JAVA实验环境 1.JDK的下载 (1)打开 IE 浏览器,输入网址“http://www.oracle.com/index.html”,浏览 Oracle 官方主页.鼠标双击Downloa ...
- Python Django log日志
log日志 log开发日志 一.创建项目 1.python -m venv ll_env # 创建虚拟环境 2.source ll_env/bin/activate # 激活虚拟环境 3.pip in ...
- 配置监听器 服务器启动时 检索常用数据 保存在application中 减少数据的查询操作(OA项目)
模型 大致介绍一下:左侧菜单是用户登录成功之后显示的页面 这些数据就是通过查询数据库 然后在页面中把查到的数据 循环遍历出来 构成了操作菜单 第一个解决的问题:常用数据 在服务器启动的时候 ...
- BA--干球温度、露点温度和湿球温度--概念
1. 干球温度.露点温度和湿球温度 dry bulb temperature, dew temperature, and wet-bulb temperature 摘要:未饱和湿空气中水蒸汽处于过热状 ...
- 在MVC中使用泛型仓储模式和依赖注入实现增删查改
标签: 原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository ...