因为两个窗口互不相干,所以需要重新创建一个窗口类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. 各浏览器的userAgent对照表

    IE  Mozilla/4.0 (compatible; MSIE 8.0; Windows NT6.0) Mozilla/4.0 (compatible; MSIE 7.0; Windows NT5 ...

  2. 关于cout输出精度问题

    #include <iostream.h> #include <iomanip.h> void main(void) { cout.setf(ios::fixed); cout ...

  3. HDU5213(容斥定理+莫队算法)

    传送门 题意 给出n个数和幸运数k,m次询问,每次询问[l1,r1]和[l2,r2]有多少对数满足x+y=k,x∈[l1,r1],y∈[l2,r2] 分析 看到m只有3e4,可以考虑\(m\sqrt{ ...

  4. hdoj1596【spfa,松弛】

    积压很久的一道...一看直接spfa水过..但是看那个safest怎么求得?松弛的时候取大. #include <bits/stdc++.h> using namespace std; t ...

  5. IE css hack整理

    CSS hack由于不同的浏览器,比如Internet Explorer 6,Internet Explorer 7,Mozillafirefox等,对CSS的解析认识不一样,因此会导致生成的页面效果 ...

  6. python之list操作

    序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. 列表(list)是最常用的Python数据类型,它可以作为一个方 ...

  7. Mike and gcd problem CodeForces - 798C

    题目 (智商题 or 糟心的贪心) 题意: 有一个数列a1,a2,...,an,每次操作可以将相邻的两个数x,y变为x-y,x+y,求最少的操作数使得gcd(a1,a2,...,an)>1.gc ...

  8. C. Bear and Colors 区间枚举的技巧

    http://codeforces.com/problemset/problem/673/C 先说一个枚举区间的技巧,枚举前缀,不要枚举后缀. 就是下面这个代码是不好的 ; i <= n; ++ ...

  9. 动手实现 React-redux(五):Provider

    我们要把 context 相关的代码从所有业务组件中清除出去,现在的代码里面还有一个地方是被污染的.那就是 src/index.js 里面的 Index: ... class Index extend ...

  10. .net 音频转换 .amr 转 .mp3 (七牛转换法)

    .amr 用于移动设备的音频,压缩比比较大,多用于人声.通话,效果还行!所以,移动设备多采用amr格式来进行录存!比较常见的例子:通话录音,微信语音以及录音等! 这个鬼,用两个字来形容,就是“蛋疼”: ...