今天在项目中,发现有一个十分重要的功能,就是2个界面进行数据通信。

记得1年多前,刚刚学习Qt,对这个无法理解,然后经过一年多的学习和理解,在此把自己学习的感悟和知识在此总结下。

下面是使用emit 发射这个信号,用信号与槽进行数据通信。

功能如下动态图:

这里的逻辑是Widget类是主界面,他构造出一个主界面。

Widget2类是当Widget里面点击按钮才创建的界面,Widget2把输入的数据发送给Widget。

这里面有个重要的地方:

原理:通过信号与槽进行通信时,发送方要构造一个SIGNAL,并且要用emit进行发送出去,接收emit发来的SIGNAL,再通过信号与槽与自己的SLOT连接,从而得到数据

重要的截图如下:

这里要注意,信号与槽参数的匹配;

这里要注意connect的对象,是widget2,而不是this里面的东西。

原因是:sendData是widget2里面的;其次是链接是widget2,而不是widget

源码如下:

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include "widget2.h"namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();public slots:void pressBtn();void receivData(QString data);private:Ui::Widget *ui;Widget2 *widget2;
};#endif // WIDGET_H

widget2.h

#ifndef WIDGET2_H
#define WIDGET2_H#include <QWidget>namespace Ui {
class Widget2;
}class Widget2 : public QWidget
{Q_OBJECTpublic:explicit Widget2(QWidget *parent = 0);~Widget2();public slots:void pressBtn();signals:void sendData(QString data);private:Ui::Widget2 *ui;
};#endif // WIDGET2_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(pressBtn()));
}void Widget::receivData(QString data){ui->lineEdit->setText(data);
}void Widget::pressBtn(){widget2=new Widget2();connect(widget2,SIGNAL(sendData(QString)),this,SLOT(receivData(QString)));widget2->show();
}Widget::~Widget()
{delete ui;
}

widget2.cpp

#include "widget2.h"
#include "ui_widget2.h"Widget2::Widget2(QWidget *parent) :QWidget(parent),ui(new Ui::Widget2)
{ui->setupUi(this);connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(pressBtn()));
}Widget2::~Widget2()
{delete ui;
}void Widget2::pressBtn(){emit sendData(ui->lineEdit->text());
}

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

Qt工作笔记-使用信号与槽让两个界面进行数据通信相关推荐

  1. Qt工作笔记-通过信号与槽实现定时器

    程序运行截图如下: 代码如下: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>namespace Ui { cla ...

  2. Qt工作笔记-对信号与槽的进一步理解(信号与信号关联)

    运行截图如下: 关键代码如下: connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(btnClicked()));connect(thi ...

  3. Qt工作笔记-对qmake的认识【两篇转载结合】

    关于qmake其实可以使用qmake生成各种类型编译器的文件. 比如下面的这一条命令:qmake -tp vc XXXXXXXX.pro -spec win32-msvcXXXX 如msvc2010 ...

  4. PyQt5 笔记3 -- 信号与槽

    PyQt5 笔记3 – 信号与槽(signals and slots) 学习资料: PyQt5 教程 PyQt5 官方文档 1.信号与槽 QT所有的应用都是事件驱动的.事件大部分都是由用户的行为产生的 ...

  5. Qt工作笔记-Qt元对象系统解析【2合1】

    博文转载地址: https://blog.csdn.net/spwper/article/details/51332187 说Qt信号与槽是一个很好机制,不如说Qt的元对象系统很强大.这也是大家讲Qt ...

  6. Qt工作笔记-发送端发送Json格式的数据包,接收端解析数据包

    原理以及运行 原理是因为QJsonDocument提供了一个函数toJson 可以直接把Json数据转成QByteArray,这样就可以直接发送数据包,然后再按照常规方法解析即可,本源码中含解析内容, ...

  7. Qt编程中的信号和槽机制

    Qt编程中的信号和槽机制 在使用自定义类创建一个按钮之后,只能看到一个按钮的图形,但是使用鼠标点击并无任何反应,下面想要实现一个"点击按钮可以关闭窗口"的功能. 关闭窗口的功能可以 ...

  8. [QT]2022.4.30 信号和槽的小玩意儿

    目录 前言: 信号和槽的自定义 关于自定义信号 自定义信号和槽的重载 信号和信号的连接 拓展 信号槽中的lamba表达式 总结 前言: 提到信号和槽(Signal & Slot),首先我们来看 ...

  9. PyQt5 随笔:信号与槽的两种使用方法:@pyqtSlot() 和 connect()

    PyQt5 随笔:信号与槽的两种连接方法:@pyqtSlot() 和 connect() 1. @pyqtSlot() @pyqtSlot()有两种使用情况.如下面两个例子. 例子1:一个信号时,如p ...

最新文章

  1. 函数指针--全局函数指针与类的函数指针(二)
  2. Java并发,volatile+不可变容器对象能保证线程安全么?!
  3. jQuery实现表格拖动排序
  4. linux增加 编译选项,4. CMake 系列 - 项目添加编译选项
  5. cmd 调用webservice接口_C++ 调用 Webservice gSoap 方法
  6. Nginx代理功能与负载均衡详解
  7. JQuery DataTables 列自己定义数据类型排序
  8. C#面试题(.net开发人员必备)
  9. 网络限流linux,DockOne微信分享(一九八):容器网络限流实践
  10. 一种提升语音识别准确率的方法与流程
  11. Caffe(13)--(SSRNet模型)Keras转Caffe教程
  12. 【原创】全文搜索引擎技术原理入门
  13. Abbyy FineReader PDF转word不乱码
  14. CF949A Zebras 构造
  15. 微信公众平台注册与认证图文教程分享
  16. python房价预测_人工智能python实现-预测房价:回归问题
  17. H5网页使用支付宝授权登录获取用户信息详解
  18. Photoshop制作水晶立体字
  19. php中的如何将拼接到一起,如何将两个视频拼接在一起?视频拼接方法
  20. 【好星球】热门影视免费看,直链播放,可倍速

热门文章

  1. .NET学习笔记:文件和注册表操作
  2. @90后程序员,“颜值即正义”的现在,程序员应该如何更新穿搭?
  3. i-p2psearcher开源软件源码下载
  4. 飞鸽传书官方网站 2012 最新源码公开
  5. 飞鸽传书2007用户需求就是做好需求处理
  6. 第十一节:JavaScript有了一种全新的数据类型:Symbol
  7. OpenCV中的仿射变换
  8. 机器学习 | 分类评估指标
  9. 1.9 编程基础之顺序查找 08 白细胞计数 python
  10. 基于JavaFX的Linux进程树