Qt实现主窗口和子窗口的切换
学习中遇到不明白的按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实现主窗口和子窗口的切换相关推荐
- qt 子窗口与父窗口数据通信_Qt实例--主窗口和子窗口互发信号
准备工作: 需要首先添加一个Qt设计师界面类,这里使用默认类名Form. 实例一:主窗口向子窗口发送信号 在主窗口添加一个按钮QPushButton,在子窗口添加一个标签QLabel. 主窗口添加一个 ...
- Qt渲染视频常见问题(视频渲染窗口上子窗口设置透明出现阴影问题、主窗口缩放导致视频渲染窗口部分出现视频闪烁问题)
开发环境 Qt5.9.6+VS2015 1.视频渲染窗口上子窗口设置透明出现阴影问题 平时为了方便代码管理,一般窗口上设置窗口或者控件,都会设置Parent(setParent),这样对主窗口进行某种 ...
- 在主窗口中打开一个子窗口,主窗口和子窗口怎么传递参数?
在主窗口中打开一个子窗口,主窗口和子窗口怎么传递参数? 假如主窗口是Form1,子窗口是Form2. using System.Windows.Forms; class Form1:Form { pu ...
- 父窗口与子窗口的数据传递问题
曾经有那么一道题目是关于父窗口与子窗口的数据传递问题.我当时只知道父窗口向子窗口传递数据.不知道子窗口怎么向父窗口传递数据.今天终于把这个问题解决了,呵呵,记录一下: 我权且把原始窗口叫父窗口,把从该 ...
- mfc获取子窗口句柄_前端设计-JavaScript中父窗口与子窗口间的通信
父窗体与子窗体之间的通信 在之前文章讲解windows程序设计过程中,我们曾描述了windows程序窗口之间通信与控制实现方法与过程,如窗体之间参数传递等.本文主要从Web程序开发前端JavaScri ...
- Visual C#中父窗口和子窗口之间实现控件互操作
在.NET 1.0和1.1的版本中,我们要实现父窗口和子窗口之间的互操作,有两种简单的方法. 第一种,在主窗体类中定义一个静态成员,来保存当前主窗体对象,例如: public static yourM ...
- windows窗口分析,父窗口,子窗口,所有者窗口
(本文尝试通过一些简单的实验,来分析Windows的窗口机制,并对微软的设计理由进行一定的猜测,需要读者具备C++.Windows编程及MFC经验,还得有一定动手能力.文中可能出现一些术语不统一的现象 ...
- iframe 父窗口和子窗口相互的调用方法集锦
一.父窗口调用iframe子窗口方法 1.HTML语法:<iframe name="myFrame" src="child.html"></i ...
- Electron中打开和关闭子窗口以及子窗口向父窗口传值
场景 用HTML和CSS和JS构建跨平台桌面应用程序的开源库Electron的介绍以及搭建HelloWorld: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/a ...
- 父窗口控制子窗口的行为-打开,关闭,重定位,回复
1,技术要点可以利用windows的open和closed来对子窗口的控制 应用领域:需要父窗口和子窗口之间进行互动. 代码如下: 代码 1 <!DOCTYPE html PUBLIC &qu ...
最新文章
- java流程控制语句
- 过滤器在图纸上的符号_零基础秒懂,看了这份建筑符号清单,就能快速识别建筑图纸,收藏...
- 《自然》,工程学突破!仿生物细胞群体机器人问世
- linux 系统邮件 查看清空
- Docker 被禁,K8S 救火!
- UVA11019 Martix Matcher --- AC自动机
- “盛大文学”年终派对
- 智能互联网之数据存储实践
- java 开发银行支付、对账时证书相关的操作总结
- 文件系统03 - 零基础入门学习Delphi36
- 时序图(Sequence Diagram)—UML图(六)
- 撞库、脱库和洗库是什么意思
- R语言和Python的区别
- linux用屏幕录制软件有哪些,Linux系统下推荐使用的5个屏幕录像软件是什么?
- LaTeX插入参考文献手把手教学 | BibTeX教程
- 构造体中变量后面的冒号_flow中问号在参数后面和在冒号有什么区别?declare type的作用是?看英文文档有点一知半解...
- 全面解析 UI/UE/交互设计
- tplink查看上网记录_Tplink路由器PPPOE拨号不能上网日志查看原因
- Python 进阶视频课 - 12. Nelson-Siegel 构建债券收益率曲线
- 文献综述是什么,该怎么写?
热门文章
- QNX与Linux两家未来有望独霸车载电子操作系统
- 各种计算机语言的经典书籍(C/C++/Java/C#/VC/VB等)
- python 中的 sys.stdin ,sys.stdout 和sys.stderr
- std::thread介绍
- dbd/oracle,linux centos环境下,perl使用DBD::Oracle遇到报错Can't locate DBDOracle.pm in @INC 的解决办法...
- 阿拉德之怒显示服务器错误,阿拉德之怒无法进入游戏怎么办_阿拉德之怒无法进入游戏解决方法_快吧手游...
- 旅游流的概念_旅游流
- DNS攻击流量识别思考
- 安装WGM需要java嘛,jdk7+apache-tomcat-7安装
- 列空间(column space)和零空间(null space)