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

subWidget.cpp文件

#ifndef SUBWIDGET_H
#define SUBWIDGET_H #include <QWidget>
#include <QPushButton> class SubWidget : public QWidget
{
Q_OBJECT
public:
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 <QWidget> #include <QPushButton> #include "subwidget.h"//自子窗口头文件 class MainWidget : public QWidget
{
Q_OBJECT public:
MainWidget(QWidget *parent = 0);
~MainWidget();
void mySlot();//自定义的槽函数 void changeWin(); void dealWin();
private: QPushButton btn3;
SubWidget w;//该对象在主窗口中,子窗口没有办法调用,所以需要利用子窗口发送给主窗口消息,进而主窗口进行处理
}; #endif // MAINWIDGET_H
#include "mainwidget.h"
#include <QPushButton> 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,不过从另外一种角度考虑,主窗口就是老大,老大只是对下面的信号处理,而下属子窗口不能操控老大主窗口,所以当下属子窗口需要操作老大主窗口时,需要给老大主窗口发送消息,老大主窗口再处理发送过来的消息。全程下来下属子窗口没有操控老大主窗口,都是老大主窗口自己进行信号的处理

QT+创建两个不相干的窗口实现一个显示一个不显示的更多相关文章

  1. iOS用同一个工程创建两个不同版本的应用

    http://www.cocoachina.com/ios/20150916/13324.html 如果同一个应用, 需要做一个带广告Lite版本, 一个不带广告的Pro版本. 那么问题来了, 该如何 ...

  2. QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数

    QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...

  3. Qt创建堆叠窗口

    1.QT创建堆叠窗口使用类,但是使用它时主窗口不能是MainWindow,否则会出现布局错误,本例中使用基类为QDialog QStackedWidget 2.可以配合列表框QListWidget和Q ...

  4. Qt创建窗体的过程

    版权声明 本文为原创作品,请尊重作者的劳动成果.转载必须保持文章完整性,并以超链接形式注明原始作者“ tingsking18”和 主站点地址,方便其他朋友提问和指正. QT源码解析(一) QT创建窗口 ...

  5. 使用Qt创建第一个OpenCV的Gui应用

    写在前面 学习OpenCV有一些小日子了,发现群里还有很多初学OpenCV的人像我当初一样跌跌撞撞到处找资料,所以在这里把学习笔记分享给大家,希望有志学习OpenCV进行计算机视觉活动的小伙伴们能少走 ...

  6. Qt入门(19)——自定义窗口部件

    我们介绍可以画自己的第一个自定义窗口部件.我们也加入了一个有用的键盘接口.我们添加了一个槽:setRange().        void setRange( int minVal, int maxV ...

  7. Qt入门(16)——组装窗口部件

    这个例子显示了创建几个窗口部件并用信号和槽把它们连接起来,和如何处理重新定义大小事件. #include <qapplication.h> #include <qpushbutton ...

  8. QT源码解析(七)Qt创建窗体的过程,作者“ tingsking18 ”(真正的创建QPushButton是在show()方法中,show()方法又调用了setVisible方法)

    前言:分析Qt的代码也有一段时间了,以前在进行QT源码解析的时候总是使用ue,一个函数名在QTDIR/src目录下反复的查找,然后分析函数之间的调用关系,效率实在是太低了,最近总结出一个更简便的方法, ...

  9. Qt中两种定时器用法

    在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器:一种是使用QTimer类.定时器的精确性依赖于操作系统和硬件,大多数平台支持20ms的精确度. 1.QObject类的定时器 QObj ...

随机推荐

  1. Java使用Jacob将Word、Excel、PPT转化成PDF

    使用Jacob将金山WPS转化成PDF,其中WPS文字使用KWPS.Aplication.Excel表格是KET.Application.演示文档是KWPP.Application,废话不多说,直接上 ...

  2. Google Play应用商店的下载路径(转载)

    转自:http://blog.yanwen.org/archives/1660.html 其实,好久之前就想知道google play中下载的应用到哪里去了.之前用的MIUI系统里面,google p ...

  3. C++笔试题(十)

    这些题目相比其他公司的试题,较为基础,全部为C语言,没有涉及C++,但如果不细心,是很难得到较高分数的.另外大家转贴不要去掉我的个人信息啊.互相宣传下网站嘛.1. 找错 void test1() { ...

  4. P5112 FZOUTSY

    传送门 没想到这题还这能用莫队--本来看看以为复杂度会挂的-- 预处理出每个字母开头往后\(k\)个的字符串的哈希值,然后大概就是那道小z的袜子了 而且据说这题的哈希得用自然溢出 //minamoto ...

  5. iOS音频与视频的开发(二)- 使用AVAudioRecorder进行录制音频

    1.使用AVAudioRecorder录制视频 AVAudioRecorder与AVAudioPlayer类似,它们都属于AVFoundation的类.AVAudioRecorder的功能类似于一个录 ...

  6. Adding New Machine ZOJ - 3540

    https://vjudge.net/problem/ZOJ-3540 错误记录: 扫描线没有考虑到同一行的要删除在前,加入在后:由于用了特殊的方式所以想当然以为不需要考虑这个问题 #include& ...

  7. sendRedirect和forward区别

    参考来源:http://www.educity.cn/develop/158970.html 12.6.4  sendRedirect()和forward()方法的区别 HttpServletResp ...

  8. COPY, RETAIN, ASSIGN , READONLY , READWRITE,STRONG,WEAK,NONATOMIC整理--转

    copy:建立一个索引计数为1的对象,然后释放旧对象 对NSString 对NSString 它指出,在赋值时使用传入值的一份拷贝.拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协 ...

  9. HBase文档操作--练习篇

    1.查询学生的所有信息 数据准备 var persons = [{ name:"jim", age:25, email:"75431457@qq.com", c ...

  10. servlet service的描述:

    链接:https://www.nowcoder.com/questionTerminal/3f368578e43d48b1968d79b935d00972来源:牛客网 1.     service方法 ...