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的一大特色,该机制允许两者间传递参数,依次来实现对象间的通信.这个参数会分别存在于信号的参数列表和槽函数的参数列表中.需要注意的是,若将槽函数绑定 ...
随机推荐
- css浮动导致的高度塌陷问题及清楚浮动的方法
浮动很好用,但是用浮动后,当浮动元素的父级元素没有高度时,就会造成高度塌陷,从而影响布局.下面就从一开接触前端时,渐渐发现解决高度塌陷的问题的方式. 一.给浮动元素的父级元素添加固定的高度css[he ...
- Nginx下修改php.ini后重新加载配置文件命令
修改php.ini后 如,我的 php.ini 文件是放在 /etc/php.ini php 所在目录是 /www/Linux/php-5.2.17 修改 php.ini 后要用 php-fpm 来进 ...
- Difference between == and ===
In swift 3 and above === (or !==) Checks if the values are identical (both point to the same memory ...
- 怎么看时序图--nand flash的读操作详解 (转)
这篇文章不是介绍 nand flash的物理结构和关于nand flash的一些基本知识的.你需要至少了解 你手上的 nand flash的物理结构和一些诸如读写命令 操作的大概印象,你至少也需要看过 ...
- CDR快速制作苹果手机照片小图标
本篇教程用CorelDRAW快速制作苹果手机照片小图标,在实现的过程中主要使用了旋转复制的方法,加之一些常用工具的用法处理,最后加上透明效果下的合并模式就好了,现在跟小编一起来看看详细的操作吧! 1. ...
- 安装oracle执行runInstaller文件时报错:“……/install/.oui:Permission denied”
一:问题描述 二:出错原因 将windows下未解压的Oracle安装软件上传到了linux服务器,导致有三个文件的执行权限丢失. 三:解决方法 为其赋予相应权限即可. 1: [root@MyPc ~ ...
- let var const
eslint要求变量声明使用const的,而不是let和var如果可能的话. 如果一个变量只有在声明时才被赋值一次,那么应该使用'const' 'use strict';(function() { v ...
- 很详尽KMP算法(厉害)
作者:July时间:最初写于2011年12月,2014年7月21日晚10点 全部删除重写成此文,随后的半个多月不断反复改进.后收录于新书<编程之法:面试和算法心得>第4.4节中. 1. 引 ...
- jquery ajax 全介绍
下面是Jquery中AJAX参数详细列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求 ...
- [luogu2052 NOI2011] 道路修建 (树形dp)
传送门 Description 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿 意修建恰好 n – 1 ...