Qt如何实现两个独立窗口的信号通信
短信预约 -IT技能 免费直播动态提醒
小编给大家分享一下Qt如何实现两个独立窗口的信号通信,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
具体内容如下
知识点
Qt两个窗口的建立、窗口的通信、处理子窗口的信号、信号的重载、Lamber表达式、自定义信号和自定义槽函数
结果演示
main.cpp
#include "mainwindow.h"#include "subwidget.h"#include <QApplication>int 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 <QMainWindow>#include <QPushButton>#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 <QWidget>#include <QPushButton.h>class SubWidget : public QWidget{ Q_OBJECTpublic: explicit SubWidget(QWidget *parent = 0); void sendSlot();signals: void mySignal(); void mySignal(int,QString);public slots:private: QPushButton *subP1;//子窗口按钮};#endif // SUBWIDGET_H
mainwindow.cpp
#include "mainwindow.h"#include <QDebug> //打印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); //主窗口调用子窗口的信号 //主窗口显示,子窗口隐藏 //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()<<a; } );}void MainWindow::changeWin(){ this->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如何实现两个独立窗口的信号通信”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341