QT5制做两个独立窗口

目录

增加第二个窗口

主窗口文件添加一个私有成员为子窗口

定义两个槽函数和  关联按钮和子窗口和主窗口

添加子窗口成员

子窗口处理函数

补充回顾


增加第二个窗口

1、

 2、

3

主窗口文件添加一个私有成员为子窗口

在mainwidget.h文件

同时添加两个槽;来处理两个窗口;

void changwindow();主窗口 按键后进入这个槽
void dealsubwindows(); 子窗口的发信号 后  进入这个槽
#ifndef MAINWIDGET_H
#define MAINWIDGET_H#include<QPushButton>//添加按键头文件
#include <QWidget>
#include"subwidget.h"class mainWidget : public QWidget
{Q_OBJECTpublic:mainWidget(QWidget *parent = 0);~mainWidget();void myslot();//声明一个共有 ,自定义一个槽为共有成员void changwindow();//添加一个槽 关闭 主窗口 打开子窗口void dealsubwindows();//添加一个槽 关闭子 开主窗口
private:  //添加两个私有成员 按键控件QPushButton b1;QPushButton *b2;QPushButton b3;//设置b3按钮subwidget w;//添加一个私有为子窗};#endif // MAINWIDGET_H

定义两个槽函数和  关联按钮和子窗口和主窗口

mainwidget.c文件里面

#include "mainwidget.h"
#include<QPushButton>
mainWidget::mainWidget(QWidget *parent): QWidget(parent)
{b1.setParent(this);//this 是这个窗口。就是main函数构造的wb1.setText("close");b1.move(100,100);b2 = new QPushButton(this);//新建个空间给b2指针b2->setText("send");
//   connect(&b1,&QPushButton::pressed,this,&mainWidget::close   );//按键(信号发出者) ,按键发出者的类 ::(作用域)类的函数(发送的信号),接收者(窗口),接收动作类+作用域+函数(槽函数)connect(b2,&QPushButton::pressed,this,&mainWidget::myslot);//按键(信号发出者) ,按键发出者的类 ::(作用域)类的函数(发送的信号),接收者(窗口),控件类+作用域+函数(槽函数)connect(b2,&QPushButton::pressed,&b1,&mainWidget::hide);//hide 隐藏//按键(信号发出者) ,按键发出者的类 ::(作用域)类的函数(发送的信号),接收者(按键),控件类+作用域+函数(槽函数)this->setWindowTitle("老大");b3.setParent(this);b3.setText("切换到子窗口");b3.move(50,50);connect(&b3,&QPushButton::released,this,&mainWidget::changwindow);//按钮 和槽的联系// w.show();connect(&w,&subwidget::mySinal,this,&mainWidget::dealsubwindows);//按钮 和槽的联系resize(500,500);//设定窗口大小
}void mainWidget:: myslot()//槽函数的定义,自定义槽
{b2->setText("123");//槽函数的函数动作}
void mainWidget::changwindow()//槽函数处理
{this->hide();//关掉mainWidget基类  主窗口w.show();//子窗口 显示}
void mainWidget::dealsubwindows()//槽函数处理
{this->show();//打开mainWidget基类  主窗口w.hide();//子窗口 关闭}
mainWidget::~mainWidget()
{}

重点
connect(&w,&subwidget::mySinal,this,&mainWidget::dealsubwindows);//按钮 和槽的联系

w的信号 ,这个基类窗口 响应 槽函数;

添加子窗口成员

subwidget.h里面;添加个信号;添加个槽;添加个按钮

添加的信号成员;给主窗口接受的信号
signals:
     /*信号必须有signals 关键字来声明
      * 信号没有返回值,但可以有参数
      * 信号就是函数的声明,只需声明,无需定义
      * 使用:emit mySignal();
      * */
    void mySinal();

#ifndef SUBWIDGET_H
#define SUBWIDGET_H#include <QWidget>
#include<QPushButton>//class subwidget : public QWidget
{Q_OBJECT
public:explicit subwidget(QWidget *parent = 0);void sendSlots();//槽函数,响应按钮,发送信号
signals:/*信号必须有signals 关键字来声明* 信号没有返回值,但可以有参数* 信号就是函数的声明,只需声明,无需定义* 使用:emit mySignal();* */void mySinal();public slots:
//新加的窗口 私有成员 按键 b
private:QPushButton b;};#endif // SUBWIDGET_H

子窗口处理函数

#include "subwidget.h"
#include<QPushButton>
subwidget::subwidget(QWidget *parent) : QWidget(parent)
{this->setWindowTitle("小弟");//设置子窗口的标题b.setParent(this);//给b指定 父类b.setText("返回主窗口");//设置按钮文本connect(&b,&QPushButton::clicked,this,&subwidget::sendSlots);////按键 按下 这个基类相应个槽函resize(500,500);//限制大小
}void subwidget::sendSlots()
{emit mySinal();//槽里面发送个信号 必须有emit 关键字
}

 emit mySinal();//槽里面发送个信号 必须有emit 关键字

补充回顾

构造函数是一种特殊的成员函数,用于创建和初始化对象时调用

所以在主函数中

mainWidget w;//执行基类的构造函数 声明,就执行构造函数
mainWidget::mainWidget(QWidget *parent) 这就是构造函数
    : QWidget(parent)
{

      里面的this  指定为 mainWidget类型的 声明 w 也就是窗口控件;

}

带参信号

在subwidget.h文件中添加个带参信号成员

#ifndef SUBWIDGET_H
#define SUBWIDGET_H#include <QWidget>
#include<QPushButton>//class subwidget : public QWidget
{Q_OBJECT
public:explicit subwidget(QWidget *parent = 0);void sendSlots();//槽函数,响应按钮,发送信号
signals:/*信号必须有signals 关键字来声明* 信号没有返回值,但可以有参数* 信号就是函数的声明,只需声明,无需定义* 使用:emit mySignal();* */void mySinal();void mySinal(int,QString);//qT的字符串类型 QString/*信号名字已经相同,所以信号重载* 有重载的信号,需要用函数指针;* 用重载的信号,只能用指针* */
public slots:
//新加的窗口 私有成员 按键 b
private:QPushButton b;};#endif // SUBWIDGET_H

在子窗口的槽函数里面发送带参信号

#include "subwidget.h"
#include<QPushButton>
subwidget::subwidget(QWidget *parent) : QWidget(parent)
{this->setWindowTitle("小弟");//设置子窗口的标题b.setParent(this);//给b指定 父类b.setText("返回主窗口");//设置按钮文本connect(&b,&QPushButton::clicked,this,&subwidget::sendSlots);////按键 按下 这个基类相应个槽函resize(500,500);//限制大小
}void subwidget::sendSlots()
{emit mySinal();//槽里面发送个信号 必须有emit 关键字emit mySinal(250,QString("我是子窗口"));//发送带参信号
}

在主窗口构造函数处理信号

用函数指针来确定使用那个重载的信号;

添加个槽打印参数;subwindows_printf(int a,QString str)

参函数定义 void mainWidget::subwindows_printf(int a,QString str)

信号,和槽函数响应

   void (subwidget::*p_sinal )(int ,QString)=&subwidget::mySinal;//依靠类型指针(带参),来区分重载函数;
   connect(&w,p_sinal,this,&mainWidget::subwindows_printf);//按钮 和槽的联系
#include "mainwidget.h"
#include<QPushButton>
#include<QDebug>
mainWidget::mainWidget(QWidget *parent): QWidget(parent)
{b1.setParent(this);//this 是这个窗口。就是main函数构造的wb1.setText("close");b1.move(100,100);b2 = new QPushButton(this);//新建个空间给b2指针b2->setText("send");
//   connect(&b1,&QPushButton::pressed,this,&mainWidget::close   );//按键(信号发出者) ,按键发出者的类 ::(作用域)类的函数(发送的信号),接收者(窗口),接收动作类+作用域+函数(槽函数)connect(b2,&QPushButton::pressed,this,&mainWidget::myslot);//按键(信号发出者) ,按键发出者的类 ::(作用域)类的函数(发送的信号),接收者(窗口),控件类+作用域+函数(槽函数)connect(b2,&QPushButton::pressed,&b1,&mainWidget::hide);//hide 隐藏//按键(信号发出者) ,按键发出者的类 ::(作用域)类的函数(发送的信号),接收者(按键),控件类+作用域+函数(槽函数)this->setWindowTitle("老大");b3.setParent(this);b3.setText("切换到子窗口");b3.move(50,50);connect(&b3,&QPushButton::released,this,&mainWidget::changwindow);//按钮 和槽的联系// w.show();void (subwidget::*p_not)()=&subwidget::mySinal;//依靠类型指针,来区分重载函数;connect(&w,p_not,this,&mainWidget::dealsubwindows);//按钮 和槽的联系void (subwidget::*p_sinal )(int ,QString)=&subwidget::mySinal;//依靠类型指针(带参),来区分重载函数;connect(&w,p_sinal,this,&mainWidget::subwindows_printf);//按钮 和槽的联系resize(500,500);//设定窗口大小
}void mainWidget:: myslot()//槽函数的定义,自定义槽
{b2->setText("123");//槽函数的函数动作}void mainWidget::changwindow()//槽函数处理
{this->hide();//关掉mainWidget基类  主窗口w.show();//子窗口 显示}
void mainWidget::dealsubwindows()//槽函数处理
{this->show();//打开mainWidget基类  主窗口w.hide();//子窗口 关闭}
mainWidget::subwindows_printf(int a,QString str)
{qDebug()<< a<<str.toUtf8().data();//显示a和str
}
mainWidget::~mainWidget()
{}

 在槽函数调用打印的时候

qDebug()在头文件QDebug

需要包含头文件

#include<QDebug>

 

主窗口的.h文件的成员变量

#ifndef MAINWIDGET_H
#define MAINWIDGET_H#include<QPushButton>//添加按键头文件
#include <QWidget>
#include"subwidget.h"class mainWidget : public QWidget
{Q_OBJECTpublic:mainWidget(QWidget *parent = 0);~mainWidget();void myslot();//声明一个共有 ,自定义一个槽为共有成员void changwindow();//添加一个槽 关闭 主窗口 打开子窗口void dealsubwindows();//添加一个槽 关闭子 开主窗口void subwindows_printf(int a,QString str);//
private:  //添加两个私有成员 按键控件QPushButton b1;QPushButton *b2;QPushButton b3;//设置b3按钮subwidget w;//添加一个私有为子窗};#endif // MAINWIDGET_H

qDebug()<< a<<str.toUtf8().data();

toUtf8()  选中,F1进入帮助文档;

QByteArray QString::toUtf8() const

Returns a UTF-8 representation of the string as a QByteArray.//转换UTF8返回字符的字节数组

data()  选中,F1进入帮助文档;

char * QByteArray::data()
Returns a pointer to the data stored in the byte array。//返回一个指针,存储数组的指针

回顾补充:

选中QT的函数,F1进入快速浏览帮助文档,再按F1进入全屏帮助文档,ESC退出查阅

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/5603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 系统上安装 NVIDIA 驱动程序失败(X server问题)

报错信息&#xff1a; ERROR: You appear to be running an X server; please exit X before installing. For further details, please see the section INSTALLING THE NVIDIA DRIVER in the README available on the Linux driver download page at www.nvidia.com. ERROR: …

Docker: 如何不新建容器 修改运行容器的端口

目录 一、修改容器的映射端口 二、解决方案 三、方案 一、修改容器的映射端口 项目需求修改容器的映射端口 二、解决方案 停止需要修改的容器 修改hostconfig.json文件 重启docker 服务 启动修改容器 三、方案 目前正在运行的容器 宿主机的3000 端口 映射 容器…

vue2实现面包屑功能

目录 1. store/index.js 2. router/index.js 3. Header.vue 在Vue 2中实现面包屑导航是一种常见的前端实践,它可以帮助用户了解当前页面在网站结构中的位置,并快速导航到上一级或根目录。以下是使用Vue 2实现面包屑导航的基本步骤: 1. store/index.js state中定义一个面…

python 关键字(await)

2、await 在Python的异步编程中,await关键字扮演着至关重要的角色。对于初学者来说,理解await的使用和背后的概念可能有些困难,但对于有经验的开发者来说,掌握它则是编写高效、响应性强的代码的关键。下面我将从基础到高级,逐步解析await关键字。 基础知识:await是什么?…

NLP(11)--词向量

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 one-hot 编码 i love u [1,2,3] 词向量训练目标&#xff1a; 如果两个词在文本出现&#xff0c;它的前后出现的词相似&#xff0c;则这两个词语义相似 cbow(基于窗口预测词)缺点 :输出层是vocab_size 会很大 收敛速度会很慢…

【综述】多核处理器芯片

文章目录 前言 Infineon处理器 AURIX™系列 TC399XX-256F300S 典型应用 开发工具 参考资料 前言 见《【综述】DSP处理器芯片》 Infineon处理器 AURIX™系列&#xff0c;基于TriCore内核&#xff0c;用于汽车和工业领域。 XMC™系列&#xff0c;基于ARM Cortex-M内核&…

test4282

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

2024五一杯数学建模A题思路分析-钢板最优切割路径问题

文章目录 1 赛题选题分析 2 解题思路3 最新思路更新 1 赛题 A题 钢板最优切割路径问题 提高钢板下料切割过程中的工作效率&#xff0c;是模具加工企业降低成本和增加经济效益的重要途径&#xff0c;其中钢板切割的路径规划是钢板切割过程的一个关键环节。 钢板切割就是使用特殊…

2024 五一杯高校数学建模邀请赛(C题)| 煤矿深部开采冲击地压危险预测 |建模秘籍文章代码思路大全

铛铛&#xff01;小秘籍来咯&#xff01; 小秘籍团队独辟蹊径&#xff0c;构建了这一题的详细解答哦&#xff01; 为大家量身打造创新解决方案。小秘籍团队&#xff0c;始终引领着建模问题求解的风潮。 抓紧小秘籍&#xff0c;我们出发吧~ 让我们看看五一杯的C题&#xff01; 完…

【Jenkins】持续集成与交付 (十二):Jenkins构建(Maven类型项目)和部署项目

🟣【Jenkins】持续集成与交付 (十二):Jenkins构建(Maven类型项目)和部署项目 一、安装Maven Integration插件二、创建Maven项目三、配置项目3.1 配置执行构建操作3.2 执行Maven项目构建3.3 部署项目3.5 再次构建3.4 验证访问四、总结💖The Begin💖点点关注,收藏不迷…

ChatGPT 网络安全秘籍(一)

原文&#xff1a;zh.annas-archive.org/md5/6b2705e0d6d24d8c113752f67b42d7d8 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 前言 在不断发展的网络安全领域中&#xff0c;由 OpenAI 推出的 ChatGPT 所代表的生成式人工智能和大型语言模型&#xff08;LLMs&#xf…

MATLAB初学者入门(30)—— 数据库开发

在MATLAB中实现数据库开发涉及连接数据库、执行SQL查询、处理查询结果以及将数据用于分析和可视化。MATLAB提供了数据库工具箱&#xff0c;该工具箱支持与多种数据库系统的连接&#xff0c;包括但不限于MySQL、Oracle、SQL Server、PostgreSQL等。 案例分析&#xff1a;使用MA…

【软件开发规范篇】JAVA后端开发编码格式规范

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

软件网关--Nginx

Nginx 的多功能用途 Nginx 是构建现代化分布式应用程序的重要工具&#xff0c;它的功能远不止于高性能的 Web 服务器和反向代理。它还能充当 API 网关&#xff0c;处理前后端通信、认证、授权、监控等任务。以下是 Nginx 的主要用途&#xff1a; 前后端通信代理&#xff1a;N…

公共 IP 地址与私有 IP 地址区别有哪些?

​  IP 地址是分配给互联网上每个设备的唯一数字 ID。 IP 地址可以在 Internet 上公开使用&#xff0c;也可以在局域网 (LAN)上私有使用。本文&#xff0c;我们主要探讨公共 IP 地址和私有 IP 地址之间的区别。 公共IP地址&#xff1a;公共IP地址是用于访问Internet的向外的I…

头歌:SparkSQL简单使用

第1关&#xff1a;SparkSQL初识 任务描述 本关任务&#xff1a;编写一个sparksql基础程序。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1. 什么是SparkSQL 2. 什么是SparkSession。 什么是SparkSQL Spark SQL是用来操作结构化和半结构化数据的接口。…

c++缓冲区同步原理与std::ios::sync_with_stdio作用

缓冲区同步机制 为什么需要缓冲区同步 c是基于c语言的扩展语言&#xff0c;本质上它继承了c语言许多特性&#xff0c;同时也继承了C语言特性&#xff0c;在c语言中stdio为输入输出缓冲区&#xff0c;stdin是输入缓冲区&#xff0c;stdout是输出缓冲区&#xff0c;C不与C语言使…

Python爬虫-车主之家详情页汽车数据

前言 本文是该专栏的第26篇,后面会持续分享python爬虫干货知识,记得关注。 本文以车主之家的汽车详情页为例,获取对应车型的全部汽车相关数据(包含车型配置,车型销售数据,以及上牌数据等等)。 具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,…

AI家居设备的未来:智能家庭的下一个大步

&#x1f512;目录 ☂️智能家居设备的发展和AI技术的作用 ❤️AI技术实现智能家居设备的自动化控制和智能化交互的依赖 AI家居设备的未来应用场景 &#x1f4a3;智能家庭在未来的发展和应用前景 &#x1f4a5;智能家居设备的发展和AI技术的作用 智能家居设备的发展和AI技术的…

Liunx发布tomcat项目

Liunx在Tomcat发布JavaWeb项目 1.问题2.下载JDK3.下载Tomcat4.Tomcat本地JavaWeb项目打war包、解压、发布5.重启Tomcat,查看项目 1.问题 1.JDK 与 Tomcat 版本需匹配&#xff0c;否则页面不能正确显示 报错相关&#xff1a;Caused by: java.lang.ClassNotFoundException: java…