博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QT+创建两个不相干的窗口实现一个显示一个不显示
阅读量:5287 次
发布时间:2019-06-14

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

因为两个窗口互不相干,所以需要重新创建一个窗口类subWidget

subWidget.cpp文件

#ifndef SUBWIDGET_H#define SUBWIDGET_H#include 
#include
class SubWidget : public QWidget{ Q_OBJECTpublic: explicit SubWidget(QWidget *parent = 0); void sendSlot();signals: /*信号必须有singles关键字来声明 * 信号没有返回值,但可以有参数 * 信号就是函数的生命,只需声明,无需定义 * 使用:emit mySignal(); */ void mySignal();public slots:private: QPushButton btn4;};#endif // SUBWIDGET_H

 

#include "subwidget.h"SubWidget::SubWidget(QWidget *parent) : QWidget(parent){    this->setWindowTitle("波老师");    this->setFixedSize(360,480);    btn4.setParent(this);    btn4.setText("切换到苍老师");    //点击按钮btn4实现给主窗口发送信号    connect(&btn4,&QPushButton::clicked,this,&SubWidget::sendSlot);}void SubWidget::sendSlot(){    emit mySignal();}

 

#ifndef MAINWIDGET_H#define MAINWIDGET_H#include 
#include
#include "subwidget.h"//自子窗口头文件class MainWidget : public QWidget{ Q_OBJECTpublic: MainWidget(QWidget *parent = 0); ~MainWidget(); void mySlot();//自定义的槽函数 void changeWin(); void dealWin();private: QPushButton btn3; SubWidget w;//该对象在主窗口中,子窗口没有办法调用,所以需要利用子窗口发送给主窗口消息,进而主窗口进行处理};#endif // MAINWIDGET_H

 

 

#include "mainwidget.h"#include 
MainWidget::MainWidget(QWidget *parent) : QWidget(parent){ //互相切换窗口的小游戏 this->setFixedSize(360,480); this ->setWindowTitle("苍老师"); btn3.setParent(this); btn3.setText("换到波老师"); btn3.move(50,50); //显示子窗口// w.show(); //点击按钮btn3实现主窗口隐藏,子窗口显示 connect(&btn3,&QPushButton::released,this,&MainWidget::changeWin); //处理子窗口发送过来的信号 connect(&w,&SubWidget::mySignal,this,&MainWidget::dealWin);}//自定义槽函数的实现void MainWidget::changeWin(){ //子窗口显示, w.show(); //本窗口隐藏 this ->hide();}void MainWidget::dealWin(){ //子窗口隐藏 w.hide(); //本窗口显示 this->show();}MainWidget::~MainWidget(){}

 利用emit 来进行子窗口信号的传递,进而在主窗口中进行信号处理(即子窗口发送一个消息给主窗口,剩下的就交给主窗口进行处理)

之所以用两个connect来实现这个功能,这是因为在子窗口中不能调用主窗口中创建的对象w,不过从另外一种角度考虑,主窗口就是老大,老大只是对下面的信号处理,而下属子窗口不能操控老大主窗口,所以当下属子窗口需要操作老大主窗口时,需要给老大主窗口发送消息,老大主窗口再处理发送过来的消息。全程下来下属子窗口没有操控老大主窗口,都是老大主窗口自己进行信号的处理

转载于:https://www.cnblogs.com/doker/p/11025422.html

你可能感兴趣的文章
The operation couldn’t be completed. (LaunchServicesError error 0.)
查看>>
php每天一题:strlen()与mb_strlen()的作用分别是什么
查看>>
工作中收集JSCRIPT代码之(下拉框篇)
查看>>
《转载》POI导出excel日期格式
查看>>
code异常处理
查看>>
git - 搭建最简单的git server
查看>>
会话控制
查看>>
推荐一款UI设计软件Balsamiq Mockups
查看>>
Linux crontab 命令格式与详细例子
查看>>
百度地图Api进阶教程-地图鼠标左右键操作实例和鼠标样式6.html
查看>>
游标使用
查看>>
LLBL Gen Pro 设计器使用指南
查看>>
SetCapture() & ReleaseCapture() 捕获窗口外的【松开左键事件】: WM_LBUTTONUP
查看>>
Android 设置界面的圆角选项
查看>>
百度地图api服务端根据经纬度得到地址
查看>>
根据xml生成相应的对象类
查看>>
Android StageFrightMediaScanner源码解析
查看>>
八叉树
查看>>
Git 远程仓库
查看>>
javascript的发展及个人笔记
查看>>