mainWidget.h

#ifndef MAINWIDGET_H
#define MAINWIDGET_H #include <QWidget>
#include <QPushButton>
#include "subwidget.h" class mainWidget : public QWidget
{
Q_OBJECT public:
mainWidget(QWidget *parent = ); ~mainWidget();
//Qt4信号连接
//QT4槽函数必须有slots关键字来修饰
//public slots:
//槽没有返回值,因为槽和信号是对应的,信号没有返回值
void mySlot();
void changeWin();
void dealSub();
void dealSlot(int,QString); private:
QPushButton b1;
QPushButton *b2;
QPushButton b3; subWidget subw; }; #endif // MAINWIDGET_H

subWidget.h

#ifndef SUBWIDGET_H
#define SUBWIDGET_H #include <QWidget>
#include <QPushButton> class subWidget : public QWidget
{
Q_OBJECT
public:
explicit subWidget(QWidget *parent = nullptr); void sendSlot();
signals:
/* 信号必须有signals关键字来声明
* 信号没有返回值,但可以有参数
* 信号就是函数的声明,只需声明,无需定义
* 使用:emit mySignal();
* 信号可以重载
*/
void mySignal();
void mySignal(int,QString); public slots: private:
QPushButton b;
}; #endif // SUBWIDGET_H

main.cpp

/*信号与槽:QT对象之间通信的接口
*/ #include "mainwidget.h"
#include <QApplication> int main(int argc, char *argv[])
{
QApplication a(argc, argv);
mainWidget w;//执行mainwidget的构造函数
w.show(); return a.exec();
}

mainWidget.cpp

#include "mainwidget.h"
#include <QDebug> //打印 mainWidget::mainWidget(QWidget *parent)
: QWidget(parent)
{
b1.setParent(this);
b1.setText("close");
b1.move(,); b2 = new QPushButton(this);
b2->setText("hide"); connect(&b1,&QPushButton::pressed,this,&mainWidget::close);
/* &b1:信号发出者,指针类型
* &QPushButton::pressed:处理的信号, &发送者的类名::信号的名字
* this:信号接收者
* &mainWidget::close : 槽函数,信号处理函数 &接收者的类名::槽函数的名字
*/ /* 自定义槽,普通函数的用法
* Qt5:任意的成员函数,普通全局函数,静态函数
* 槽函数需要和信号一直(参数,返回值)
* 由于信号都是没有返回值,所以,槽函数一定没有返回值
*/ connect(b2,&QPushButton::released,this,&mainWidget::mySlot); connect(b2,&QPushButton::released,&b1,&QPushButton::hide); /* 信号:短信
* 槽函数:接收短信的手机
*/ setWindowTitle("老大");//等价于this->setWindowTitle("老大");
b3.setParent(this);
b3.setText("切换到子窗口");
b3.move(,); //显示子窗口
//w.show(); connect(&b3,&QPushButton::released,this,&mainWidget::changeWin);
//处理子窗口的信号 //Qt5信号连接
void (subWidget::*funSignal)() = &subWidget::mySignal;
connect(&subw,funSignal,this,&mainWidget::dealSub);
void (subWidget::*testSignal)(int,QString) = &subWidget::mySignal;
connect(&subw,testSignal,this,&mainWidget::dealSlot); //Qt4信号连接
//QT4槽函数必须有slots关键字来修饰
//connect(&subw, SIGNAL(mySignal()),this,SLOT(dealSub()));
//connect(&subw, SIGNAL(mySignal(int QString)),this,SLOT(dealSlot(int,QString)));
//SIGNAL SLOT 将函数名字 -> 字符串,不进行错误检查
resize(,); }
void mainWidget::dealSlot(int a, QString str)
{
// str.toUtf8() -> 字节数组QByteArray
// ...data() -> QByteArray -> char*
qDebug() << a << str.toUtf8().data();
} void mainWidget::changeWin()
{
//子窗口显示
subw.show();
//本窗口隐藏
this->hide();
} void mainWidget::dealSub()
{
//子窗口隐藏
subw.hide();
//本窗口显示
this->show(); } void mainWidget::mySlot()
{
b2->setText("");
setWindowTitle("niha");
} mainWidget::~mainWidget()
{ }

subWidget.cpp

#include "subwidget.h"

subWidget::subWidget(QWidget *parent) : QWidget(parent)
{
this->setWindowTitle("小弟");
b.setParent(this);
b.setText("切换到主窗口"); connect(&b,&QPushButton::clicked,this,&subWidget::sendSlot);
resize(,);
} void subWidget::sendSlot()
{
emit mySignal();
emit mySignal(,"我是子窗口");
}

QT(4)信号与槽的更多相关文章

  1. QT点击"X"按钮,调用closeEvent()函数来实现调用特定事件(附:粗略介绍QT的信号与槽的使用方法)

    背景: QT在用户关闭窗口(直接点击"X"键)时,程序一般都需要做一些善后的事情,就我现在的程序来说,既关闭USB.如何实现? 正文: 首先,在对应窗体的".h" ...

  2. qt中信号与槽机制

    一. 简介 就我个人来理解,信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁. 信号和槽机制是 Qt 的核心机制,可以让编程人员将互不 ...

  3. QT 的信号与槽

    转载: QT 的信号与槽机制介绍 QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 ...

  4. QT的信号与槽机制介绍

      信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本文介绍了信号与槽的一些基本概念.元对象工具以及在实际使用过程中应注意的一些问题. QT是一个跨平台的C++ GUI应用构架,它提供了丰富的窗 ...

  5. Qt 的信号与槽机制介绍(10个要注意的问题)

    QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...

  6. C++框架_之Qt的信号和槽的详解

    C++_之Qt的信号和槽的详解 1.概述 信号槽是 Qt 框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式.当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal ...

  7. 【qt】QT 的信号与槽机制

    QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...

  8. QT的信号和槽机制简介

    信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本文介绍了信号与槽的一些基本概念.元对象工具以及在实际使用过程中应注意的一些问题. QT是一个跨平台的C++ GUI应用构架,它提供了丰富的窗口部 ...

  9. Qt的信号和槽是如何工作的

    用Qt做过开发的朋友,不知道是否曾为下面这些问题疑惑过:我们知道Qt是基于C++的,Qt写的代码最终还是要由C++编译器来编译,但是我们的Qt代码中有很多C++里没有的关键字,比如slots\sign ...

  10. QT_5_ Qt中信号和槽 + 自定义信号和槽 + lambda 表达式

    1.Qt中信号和槽 1.1 需求:点击按钮关闭窗口 1.2 利用connect进行链接 1.3 参数1 信号发送者(指针) 参数2 发送的信号(信号地址) 参数3 信号的接受者(指针) 参数4 处理槽 ...

随机推荐

  1. django启动时报错:Apps aren't loaded yet.

    1.解决方法 编辑manage.py文件,在文件顶部引入django模块.

  2. First non repeating word in a file? File size can be 100GB.

    1 solution 1 1.1 数据结构 一个Hashmap和一个双向链表.如果想要快速获取first,并且只遍历一次,那么就要想到双向链表和HashMap的组合. 链表可以保证第一个在head处, ...

  3. python(pytest)+allure+jenkins 实现接口自动化的思路

    效果图镇楼: 上述各模块作用: python(pytest): 1:用于读测试用例(本次用例写在csv文件中) 2:环境配置相关 3:提取1中的测试数据,组成请求体 4:发送请求 5:获取结果 6:断 ...

  4. 【python】-- 面向对象引子、概念

    面向过程编程 1.编程范式 编程是 程序 员 用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马 ...

  5. Bootstrap学习-网格系统

    1.实现原理 网格系统的实现原理非常简单,仅仅是通过定义容器大小,平分12份(也有平分成24份或32份,但12份是最常见的),再调整内外边距,最后结合媒体查询,就制作出了强大的响应式网格系统.Boot ...

  6. 【oracle案例】ORA-01722

    1.1.   ORA-01722 日期:2014-06-05 14:09 环境:測试环境   [情景描写叙述] 在数据库的升级过程中,运行SQL> @?/rdbms/admin/catupgrd ...

  7. eclilpse svn : Item is out of date 解决办法

    尝试以下方面, 1. 2.如果上面的还不行,就说明你修改了原有项目结构,可能是增加了新包,或者重命名的包或文件,那么你得先update,然后再提交 这样就OK了,我就是用了2才成功的哦.

  8. 【Prometheus】第二篇---基本查询语法

    这几天忙着开发别的项目,今天抽空写一下Prometheus的查询语法 1,查看指标 直接输入指标名字就行了,grafana会自动补全 2,查看某个指标的使用率,比如cpu使用率 用到rate函数,ra ...

  9. 改善程序与设计的55个具体做法 day5

    条款12:复制对象时勿忘其每一个成分 这里的复制是拷贝构造和operator= 每一个成分有几个维度: 1.每个成员变量 这个很好理解,添加新的成员时也要记得为每个新添加的成员执行合适的复制操作 2. ...

  10. Mysql——JDBC编程 简单的例子

    第一类连接Mysql方法见下图: 第二类连接Mysql方法:(跟第一类差不多,并提供查询操作) 首先在Mysql中建立testjdbc数据库,在该数据库下面建立Student表: 参考代码: CREA ...