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,一经查实,立即删除!

相关文章

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

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

【综述】多核处理器芯片

文章目录 前言 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; 完…

ChatGPT 网络安全秘籍(一)

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

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

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

公共 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是用来操作结构化和半结构化数据的接口。…

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…

优化NGINX性能:使用NGINX_THREADS提高并发处理能力

目录标题 1. 什么是NGINX_THREADS&#xff1f;2. 配置NGINX_THREADS3. 使用NGINX_THREADS处理耗时操作4. 性能调优5. 结论 NGINX作为一个高性能的HTTP和反向代理服务器&#xff0c;在处理高并发请求时表现出色。但随着互联网应用对性能要求的不断提高&#xff0c;深入了解和优化…

DA14531如何配置SDK工程路径

1 前言 当我们获取一个DA14531的工成样列&#xff0c;有时是不包括SDK中的公共部分的代码&#xff0c;只有用户项目代码。而想拷贝到自己的SDK中&#xff0c;如&#xff1a;F:\A02_Work\A01_Dailog\DA145xx_SDK\6.0.18.1182.1\projects\User\ble_app_sensor&#xff0c;打开工…

高颜值管理系统界面,我敢保证你肯定看不够,看了又看。

有不少老铁&#xff0c;还坚持10年前的老思路&#xff0c;总觉得B端管理系统颜值不颜值不重要&#xff0c;关键是好用就行&#xff0c;这就犯了二元论的错误。 谁说高颜值的管理系统&#xff0c;就不好用了呢&#xff1f;高颜值和易用性冲突吗&#xff1f;我看未必吧。看看大厂…

羊大师:羊奶与传统牛奶在健康方面的差异

羊大师&#xff1a;羊奶与传统牛奶在健康方面的差异 羊奶与传统牛奶在健康方面的差异主要体现在以下几个方面&#xff1a; 营养成分&#xff1a;羊奶与传统牛奶在营养成分上有所不同。羊奶中含有更多的维生素A、碳水化合物、烟酸以及磷&#xff0c;而牛奶在钙、蛋白质和锌的含…

[高质量]2024五一数学建模A题保奖思路+代码(后续会更新)

你的点赞收藏是我继续更新的最大动力&#xff0c;可点击文末卡片获取更多资料 你是否在寻找数学建模比赛的突破点&#xff1f; 作为经验丰富的数学建模团队&#xff0c;我们将为你带来2024 年华东杯&#xff08;A题&#xff09;的全面解析包。这个解决方案包不仅包括完整的代…

数组模拟双链表-java

通过数组来模拟双链表&#xff0c;并执行一些插入和删除的功能。 目录 一、问题描述 二、模拟思路 1.变量解释 2.数组初始化 3.在下标是k的结点后面插入一个结点 4.删除下标为k的结点 5.基本功能解释 三、代码如下 1.代码如下&#xff1a; 2.读入数据&#xff1a; 3…

【海博】雅思考什么?

文章目录 听力 阅读 写作 口语 参考资料 听力 听力考试分为四个部分&#xff0c;每个部分有10道题&#xff0c;每题1分。问题的排列顺序和答案在听力材料中出现的顺序一致。在播放听力材料过程中&#xff0c;考生会获得读题、写下答案以及检查答案的时间。考生应在播放听力…

Memory augment is All You Need for image restoration 论文翻译

目录 一.介绍 二.实际工作 A.图像阴影去除 B.图像去雨 C.存储模块的开发 三.网络结构 A.内存扩充 B.损失函数设计 四.实验 A.与最先进方法的比较 B.MemoryNet消融研究 五.结论 CVPR2023 MemoryNet 记忆增强是图像恢复所需要的一切 论文地址https://arxiv.org/abs/…

代码随想录算法训练营DAY47|C++动态规划Part8|198.打家劫舍、213.打家劫舍II、198.打家劫舍III

文章目录 198.打家劫舍思路CPP代码 213.打家劫舍II解决环的问题思路总结CPP代码 198.打家劫舍III思路递归三部曲——确定参数和返回值递归三部曲——确定终止条件递归三部曲——确定单层遍历的逻辑 打印dp数组CPP代码 198.打家劫舍 力扣题目链接 文章讲解&#xff1a;198.打家劫…