学习中遇到不明白的按F1查帮助文档!

1.根据基类QWidget派生出两个类,MainWidget和SubWidget
2.这里需要强调的一点的只有如何从子窗口切换到主窗口:因为为了把主窗口切换到子窗口,我们把SubWidget的对象作为MainWidget的数据成员,但是该如何实现从子窗口切换到主窗口呢?
这里用到了关键字signals(这是Qt的功能,不是C++的)

SubWidget的定义如下:

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

再看SubWidget成员函数的实现:

#include "subwidget.h"SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{b.setParent(this);b.setText("切换到主窗口");b.move(100,100);this->setWindowTitle("子窗口");this->resize(400,300);connect(&b,&QPushButton::pressed,this,&SubWidget::sendSlot);}
void SubWidget::sendSlot()
{emit mySignal();//发送广播
}

在SubWidget的成员函数中自定义了一个槽函数,用来emit mySignal();,接着主窗口就会收到并处理子窗口的信号(MainWidget 中自定义槽函数实现)。

MainWidget 的定义以及成员函数的实现如下:

#ifndef MAINWIDGET_H
#define MAINWIDGET_H#include <QWidget>
#include<QPushButton>#include "subwidget.h"//子窗口头文件class MainWidget : public QWidget
{Q_OBJECTpublic:MainWidget(QWidget *parent = nullptr);//带默认参数的构造函数void myslot();void changeWin();//切换到子窗口,并隐藏主窗口void dealSub();//处理子窗口发来的信号~MainWidget();
private:QPushButton b1;QPushButton *b2;QPushButton b3;SubWidget w;//子窗口类的对象作为主窗口类的数据成员
};
#endif // MAINWIDGET_H
#include "mainwidget.h"
#include<QPushButton>
MainWidget::MainWidget(QWidget *parent): QWidget(parent)//基类QWidget,派生类MainWidget
{b1.setParent(this);b1.setText("关闭窗口");b1.move(100,100);b2=new QPushButton(this);//使用QPushButton的构造函数指定父对象b2->setText("abc");this->setWindowTitle("主窗口");this->resize(400,300);b3.setParent(this);b3.setText("切换到子窗口");b3.move(50,50);//把光标放到要查看的类名上(这里是QPushButton),按两次F1,去它的基类中找信号函数signal或槽函数slotconnect(&b1,&QPushButton::pressed,this,&MainWidget::close);/* &b1:信号发出者,指针类型* &QPushButton::pressed:处理的信号   &发送者的类名::信号名字* this:信号接收者* &MainWidget::close:槽函数,信号处理函数  &接收的类名::槽函数名字*///接下来自定义一个槽/* 自定义槽,普通函数的用法* 可以是任意的成员函数,普通全局函数,静态函数* 槽函数需要和信号一致(参数一致,返回值一致)* 由于信号都是没有返回值的,所以,槽函数一定也是void*/connect(b2,&QPushButton::released,this,&MainWidget::myslot);connect(b2,&QPushButton::released,&b1,&QPushButton::hide);//接下来进行窗口切换任务connect(&b3,&QPushButton::released,this,&MainWidget::changeWin);//处理子窗口的信号connect(&w,&SubWidget::mySignal,this,&MainWidget::dealSub);}
void MainWidget::changeWin()
{w.show();//子窗口显示this->hide();//本窗口隐藏
}
void MainWidget::dealSub()
{this->show();//本窗口显示w.hide();//子窗口隐藏
}
void MainWidget::myslot()
{b2->setText("123");
}
MainWidget::~MainWidget()
{}

主函数如下:

#include "mainwidget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWidget w;//执行MainWidget的构造函数,在MainWidget的构造函数中构造子对象w.show();return a.exec();
}

Qt实现主窗口和子窗口的切换相关推荐

  1. qt 子窗口与父窗口数据通信_Qt实例--主窗口和子窗口互发信号

    准备工作: 需要首先添加一个Qt设计师界面类,这里使用默认类名Form. 实例一:主窗口向子窗口发送信号 在主窗口添加一个按钮QPushButton,在子窗口添加一个标签QLabel. 主窗口添加一个 ...

  2. Qt渲染视频常见问题(视频渲染窗口上子窗口设置透明出现阴影问题、主窗口缩放导致视频渲染窗口部分出现视频闪烁问题)

    开发环境 Qt5.9.6+VS2015 1.视频渲染窗口上子窗口设置透明出现阴影问题 平时为了方便代码管理,一般窗口上设置窗口或者控件,都会设置Parent(setParent),这样对主窗口进行某种 ...

  3. 在主窗口中打开一个子窗口,主窗口和子窗口怎么传递参数?

    在主窗口中打开一个子窗口,主窗口和子窗口怎么传递参数? 假如主窗口是Form1,子窗口是Form2. using System.Windows.Forms; class Form1:Form { pu ...

  4. 父窗口与子窗口的数据传递问题

    曾经有那么一道题目是关于父窗口与子窗口的数据传递问题.我当时只知道父窗口向子窗口传递数据.不知道子窗口怎么向父窗口传递数据.今天终于把这个问题解决了,呵呵,记录一下: 我权且把原始窗口叫父窗口,把从该 ...

  5. mfc获取子窗口句柄_前端设计-JavaScript中父窗口与子窗口间的通信

    父窗体与子窗体之间的通信 在之前文章讲解windows程序设计过程中,我们曾描述了windows程序窗口之间通信与控制实现方法与过程,如窗体之间参数传递等.本文主要从Web程序开发前端JavaScri ...

  6. Visual C#中父窗口和子窗口之间实现控件互操作

    在.NET 1.0和1.1的版本中,我们要实现父窗口和子窗口之间的互操作,有两种简单的方法. 第一种,在主窗体类中定义一个静态成员,来保存当前主窗体对象,例如: public static yourM ...

  7. windows窗口分析,父窗口,子窗口,所有者窗口

    (本文尝试通过一些简单的实验,来分析Windows的窗口机制,并对微软的设计理由进行一定的猜测,需要读者具备C++.Windows编程及MFC经验,还得有一定动手能力.文中可能出现一些术语不统一的现象 ...

  8. iframe 父窗口和子窗口相互的调用方法集锦

    一.父窗口调用iframe子窗口方法 1.HTML语法:<iframe name="myFrame" src="child.html"></i ...

  9. Electron中打开和关闭子窗口以及子窗口向父窗口传值

    场景 用HTML和CSS和JS构建跨平台桌面应用程序的开源库Electron的介绍以及搭建HelloWorld: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/a ...

  10. 父窗口控制子窗口的行为-打开,关闭,重定位,回复

    1,技术要点可以利用windows的open和closed来对子窗口的控制 应用领域:需要父窗口和子窗口之间进行互动. 代码如下: 代码  1 <!DOCTYPE html PUBLIC &qu ...

最新文章

  1. java流程控制语句
  2. 过滤器在图纸上的符号_零基础秒懂,看了这份建筑符号清单,就能快速识别建筑图纸,收藏...
  3. 《自然》,工程学突破!仿生物细胞群体机器人问世
  4. linux 系统邮件 查看清空
  5. Docker 被禁,K8S 救火!
  6. UVA11019 Martix Matcher --- AC自动机
  7. “盛大文学”年终派对
  8. 智能互联网之数据存储实践
  9. java 开发银行支付、对账时证书相关的操作总结
  10. 文件系统03 - 零基础入门学习Delphi36
  11. 时序图(Sequence Diagram)—UML图(六)
  12. 撞库、脱库和洗库是什么意思
  13. R语言和Python的区别
  14. linux用屏幕录制软件有哪些,Linux系统下推荐使用的5个屏幕录像软件是什么?
  15. LaTeX插入参考文献手把手教学 | BibTeX教程
  16. 构造体中变量后面的冒号_flow中问号在参数后面和在冒号有什么区别?declare type的作用是?看英文文档有点一知半解...
  17. 全面解析 UI/UE/交互设计
  18. tplink查看上网记录_Tplink路由器PPPOE拨号不能上网日志查看原因
  19. Python 进阶视频课 - 12. Nelson-Siegel 构建债券收益率曲线
  20. 文献综述是什么,该怎么写?

热门文章

  1. QNX与Linux两家未来有望独霸车载电子操作系统
  2. 各种计算机语言的经典书籍(C/C++/Java/C#/VC/VB等)
  3. python 中的 sys.stdin ,sys.stdout 和sys.stderr
  4. std::thread介绍
  5. dbd/oracle,linux centos环境下,perl使用DBD::Oracle遇到报错Can't locate DBDOracle.pm in @INC 的解决办法...
  6. 阿拉德之怒显示服务器错误,阿拉德之怒无法进入游戏怎么办_阿拉德之怒无法进入游戏解决方法_快吧手游...
  7. 旅游流的概念_旅游流
  8. DNS攻击流量识别思考
  9. 安装WGM需要java嘛,jdk7+apache-tomcat-7安装
  10. 列空间(column space)和零空间(null space)