博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QT(4)信号与槽
阅读量:6268 次
发布时间:2019-06-22

本文共 3495 字,大约阅读时间需要 11 分钟。

mainWidget.h

#ifndef MAINWIDGET_H#define MAINWIDGET_H#include 
#include
#include "subwidget.h"class mainWidget : public QWidget{ Q_OBJECTpublic: mainWidget(QWidget *parent = 0); ~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 
#include
class subWidget : public QWidget{ Q_OBJECTpublic: 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 
int main(int argc, char *argv[]){ QApplication a(argc, argv); mainWidget w;//执行mainwidget的构造函数 w.show(); return a.exec();}

mainWidget.cpp

#include "mainwidget.h"#include 
//打印mainWidget::mainWidget(QWidget *parent) : QWidget(parent){ b1.setParent(this); b1.setText("close"); b1.move(100,100); 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(50,50); //显示子窗口 //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(300,400);}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("666"); 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(300,400);}void subWidget::sendSlot(){    emit mySignal();    emit mySignal(250,"我是子窗口");}

 

转载于:https://www.cnblogs.com/cthon/p/9613515.html

你可能感兴趣的文章
LCD的接口类型详解
查看>>
nginx 基础文档
查看>>
LintCode: Unique Characters
查看>>
Jackson序列化和反序列化Json数据完整示例
查看>>
.net 中的DllImport
查看>>
nyoj 517 最小公倍数 【java睑板】
查看>>
include与jsp:include区别
查看>>
ftp的20 21端口和主动被动模式
查看>>
MySQL存储引擎选型
查看>>
Java中的statickeyword具体解释
查看>>
Linux车载系统的开发方向
查看>>
并发编程之五--ThreadLocal
查看>>
摄像头驱动OV7725学习笔记连载(二):0V7725 SCCB时序的实现之寄存器配置
查看>>
iOS播放短的音效
查看>>
[java] java 线程join方法详解
查看>>
JQuery datepicker 用法
查看>>
golang(2):beego 环境搭建
查看>>
天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十)态势标绘模块
查看>>
程序员社交宝典
查看>>
ABP理论学习之MVC控制器(新增)
查看>>