Qt如何实现两个独立窗口的信号通信
发表于:2025-11-16 作者:千家信息网编辑
千家信息网最后更新 2025年11月16日,小编给大家分享一下Qt如何实现两个独立窗口的信号通信,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下知识点Qt两个窗口的建立、窗口的通信、处理子窗口的信号、信号的重载、La
千家信息网最后更新 2025年11月16日Qt如何实现两个独立窗口的信号通信
小编给大家分享一下Qt如何实现两个独立窗口的信号通信,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
具体内容如下
知识点
Qt两个窗口的建立、窗口的通信、处理子窗口的信号、信号的重载、Lamber表达式、自定义信号和自定义槽函数
结果演示
main.cpp
#include "mainwindow.h"#include "subwidget.h"#includeint main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; w.show(); return a.exec();}
mainwindow.h
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include#include #include "subwidget.h"class MainWindow : public QMainWindow{ Q_OBJECTpublic: MainWindow(QWidget *parent = 0); ~MainWindow();public slots: void changeWin(); void ShutDown(); void delSub(); void delSubPrint(int,QString);private: QPushButton *p1; QPushButton *shutdown;//关闭按钮 SubWidget subW;};#endif // MAINWINDOW_H
subwidget.h
#ifndef SUBWIDGET_H#define SUBWIDGET_H#include#include class SubWidget : public QWidget{ Q_OBJECTpublic: explicit SubWidget(QWidget *parent = 0); void sendSlot();signals: /* 信号必须有signals关键字来声明 * 信号没有返回值,但可以有参数 * 信号就是函数的声明,只需声明,无需定义 * 使用:emit mySignal(); * 信号可以重载 */ void mySignal(); void mySignal(int,QString);public slots:private: QPushButton *subP1;//子窗口按钮};#endif // SUBWIDGET_H
mainwindow.cpp
#include "mainwindow.h"#include//打印MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){ resize(400,300); this->setWindowTitle("BOSS"); p1=new QPushButton(this); //p1->setParent(this); p1->setText("切换到子窗口"); shutdown=new QPushButton(this); shutdown->setText("关闭"); shutdown->move(100,0); //关闭所有窗口 connect(shutdown,&QPushButton::released,this,&MainWindow::ShutDown); //主窗口隐藏,子窗口显示 connect(p1,&QPushButton::released,this,&MainWindow::changeWin); /* &p1: 信号发出者,指针类型 * &QPushButton::pressed:处理的信号, &发送者的类名::信号名字 * this: 信号接收者 * &MainWidget::close: 槽函数,信号处理函数 &接收的类名::槽函数名字 */ /* 自定义槽,普通函数的用法 * Qt5:任意的成员函数,普通全局函数,静态函数 * 槽函数需要和信号一致(参数,返回值) * 由于信号都是没有返回值,所以,槽函数一定没有返回值 */ //主窗口调用子窗口的信号 //主窗口显示,子窗口隐藏 //connect(&subW,&SubWidget::mySignal,this,&MainWindow::delSub);//函数重载用不了 //信号的重载 一个有参数 一个无参数 //接收子窗口的信号方式一// void (SubWidget::*SignalOnly)()=&SubWidget::mySignal;// connect(&subW,SignalOnly,this,&MainWindow::delSub);// void (SubWidget::*SignalCanShu)(int,QString)=&SubWidget::mySignal;// connect(&subW,SignalCanShu,this,&MainWindow::delSubPrint); //接收子窗口的信号方式二:宏函数SIGNAL connect(&subW,SIGNAL(mySignal()),this,SLOT(delSub())); connect(&subW,SIGNAL(mySignal(int,QString)),this,SLOT(delSubPrint(int,QString))); //Lambda表达式, 匿名函数对象 //C++11增加的新特性, 项目文件: CONFIG += C++11 //Qt配合信号一起使用,非常方便 QPushButton *LamPush=new QPushButton(this); LamPush->setText("Lamber表达式"); LamPush->move(180,0); int a=10; connect(LamPush,&QPushButton::clicked, [=](){ qDebug()<hide(); subW.show();}//关闭窗口void MainWindow::ShutDown(){ this->close(); subW.close();}void MainWindow::delSub(){ subW.hide(); this->show();}void MainWindow::delSubPrint(int age,QString name){ // str.toUtf8() -> 字节数组QByteArray // ……data() -> QByteArray -> char * qDebug() << age << name.toUtf8().data();}MainWindow::~MainWindow(){}
subwidget.cpp
#include "subwidget.h"SubWidget::SubWidget(QWidget *parent) : QWidget(parent){ this->setWindowTitle("SUB"); subP1=new QPushButton(this); subP1->setText("切换到主窗口"); resize(500,400); //子窗口发送信号 信号是有参数+无参数的 connect(subP1,&QPushButton::clicked,this,&SubWidget::sendSlot);}//回调函数void SubWidget::sendSlot(){ emit mySignal(); emit mySignal(26,"唐维康");}看完了这篇文章,相信你对"Qt如何实现两个独立窗口的信号通信"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
信号
函数
参数
两个
通信
表达式
处理
独立
普通
名字
按钮
方式
知识
篇文章
类名
切换
一致
信号处理
全局
关键
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全定期检查记录
网络安全宣传周观后感400字
微搜服务器
美国疫情数据库
怎么看服务器装没装安全狗
网络安全政策专家
为什么地下城需要服务器
怎么打印筛选后的数据库
软件开发费会计科目
网络安全选题背景
美国对中国网络安全危害
人工智能对网络安全的影响论文
数据库怎么开启ddl
数据库恢复定义
美国电影凯尔修服务器
网站源程序安全服务器端
梅州软件开发报价
国家网络安全宣传周开场白
佳能打印服务器管理软件
外地分公司怎么远程连接数据库
重庆网络安全防护公司
沈阳网络安全学校排名
软件开发是谁赚流量钱
网络优化和网络技术工程师
688030网络安全
软件开发v字模型
杭州万户网络技术有限公司
长春的网络技术公司
亿兴互联网科技
公安网络安全须知