QT5制做两个独立窗口

news2025/1/9 16:12:10

目录

增加第二个窗口

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

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

添加子窗口成员

子窗口处理函数

补充回顾


增加第二个窗口

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_OBJECT

public:
    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函数构造的w
   b1.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函数构造的w
   b1.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_OBJECT

public:
    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.coloradmin.cn/o/1636202.html

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

相关文章

(成品论文22页)24深圳杯数学建模A题1-4问完整代码+参考论文重磅更新!!!!

论文如下&#xff1a; 基于三球定位的多个火箭残骸的准确定位 针对问题一&#xff1a;为了进行单个残骸的精确定位&#xff0c;确定单个火箭残骸发生音爆 时的精确位置和时间&#xff0c;本文基于三球定位模型&#xff0c;考虑到解的存在性和唯一性&#xff0c; 选取了四个监测…

AI大模型日报#0430:疑似GPT4.5模型刷屏、上交实现「蛋白质功能定向进化」、微软紧急撤回WizardLM-2

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了今日要点以及每条资讯的摘要。 《AI大模型日报》今日要点&#xff1a; 在AI大模型领域&#xff0c;多项研究进展和行业应用动态引发关注。一夜之间&#x…

第9篇:创建Nios II工程之读取Switch的值<二>

Q&#xff1a;上一期我们完成了Quartus硬件工程部分&#xff0c;本期我们创建Nios II软件工程这部分。 A&#xff1a;创建完BSP和Nios II Application之后&#xff0c;在source文件main.c中添加代码&#xff1a;system.h头文件中新增了Switch PIO IP的硬件信息&#xff0c;包括…

气象数据nc数据矢量化处理解析及可视化

气象数据可视化是将气象学领域中复杂的数据集转化为图形或图像的过程&#xff0c;以直观展示天气现象、气候模式、趋势和预报结果。气象数据的可视化技术广泛应用于科学研究、气象预报、航空、航海、农业生产、灾害预警系统、城市规划、公众服务等领域。以下是一些关键的气象数…

Stability AI 推出稳定音频 2.0:为创作者提供先进的 AI 生成音频

概述 Stability AI 的发布再次突破了创新的界限。这一尖端模型以其前身的成功为基础&#xff0c;引入了一系列突破性的功能&#xff0c;有望彻底改变艺术家和音乐家创建和操作音频内容的方式。 Stable Audio 2.0 代表了人工智能生成音频发展的一个重要里程碑&#xff0c;为质量…

口袋实验室--使用AD2学习频谱参数测试

目录 1. 简介 2. 频谱相关参数 2.1 频谱相关基本概念 2.1.1 采样时间间隔 2.1.2 采样频率 2.1.3 采样点数 2.1.4 采样时间长度 2.1.5 谱线数 2.1.6 奈奎斯特频率 2.1.7 频谱分辨率 2.1.8 最高分析频率 2.1.9 频谱泄露 2.2 窗函数 2.2.1 AD2的窗函数 2.2.2 测试矩…

Cesium 3dTileset 支持 uv 和 纹理贴图

原理: 使用自定义shader实现uv自动计算 贴图效果: uv效果:

链表算法题总结

链表作为一个基础的数据结构&#xff0c;在开发中经常被使用。 链表往往使用如下的数据结构来表示&#xff0c;struct node 表示链表中的一个节点&#xff0c;data 表示节点的数据&#xff1b;next 表示这个节点指向的下一个节点&#xff0c;如果是链表的尾节点&#xff0c;那…

Vulnhub-DIGITALWORLD.LOCAL: VENGEANCE渗透

文章目录 前言1、靶机ip配置2、渗透目标3、渗透概括 开始实战一、信息获取二、smb下载线索三、制作字典四、爆破压缩包密码五、线索分析六、提权&#xff01;&#xff01;&#xff01; Vulnhub靶机&#xff1a;DIGITALWORLD.LOCAL: VENGEANCE ( digitalworld.local: VENGEANCE …

服务器部署开源大模型完整教程 Ollama+Llama3+open-webui

前言 最近大语言模型大火&#xff0c;正好最近打比赛可能会用得上LLMs&#xff0c;今天就在学校的服务器上面进行一次部署。这样之后就可以直接在内网里面使用学校的LLMs了。 介绍 Ollama&#xff1a;一款可以让你在本地快速搭建大模型的工具 官网&#xff1a;https://olla…

串口协议(例如usart,iic,spi)基础概念汇总

文章目录 同步&#xff0c;异步同步通信&#xff1a;异步通信&#xff1a; 串行&#xff0c;并行串行&#xff1a;并行&#xff1a; 全双工&#xff0c;半双工&#xff0c;单工单工&#xff1a;半双工&#xff1a;全双工&#xff1a; 电平信号&#xff0c;差分信号电平信号&…

Flutter笔记:Widgets Easier组件库(2)阴影盒子

Flutter笔记 Widgets Easier组件库&#xff08;2&#xff09;&#xff1a;阴影盒子 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress o…

[软件工具]批量根据文件名查找PDF文件复制到指定的地方,如何批量查找文件复制,多个文件一起查找复制

多个文件目录下有多个PDF, 如何根据文件名一个清单&#xff0c;一次性查找多个PDF复制保存 如图所示下面有7个文件夹&#xff0c;每个文件夹里面有几百上千PDF文件 如何从上千个PDF文件中一次性快速找到我们要的文件呢 &#xff1f; 我们需要找到文件名是这样的PDF&#xff0…

如何删除BigKey1

方案一 拆分为string类型 keyvalueid:0value0..........id:999999value999999 存在的问题&#xff1a; string结构底层没有太多内存优化&#xff0c;内存占用较多 想要批量获取这些数据比较麻烦 方案二 拆分为小的hash&#xff0c;将 id / 100 作为key&#xff0c; 将id …

用Docker 创建并运行一个MySQL容器

可以在DockerHub官网上荡:mysql - Official Image | Docker Hub 指令是:docker pull mysql; 因为文件比较大可能时间比较长&#xff0c;我是跟着黑马的课走的 课程提供的有文件&#xff0c;我就用已有的资源了。 在tmp目录里放入mysql.tar包 然后cd进去 输入指令:docker lo…

Stm32CubeMX 为 stm32mp135d 添加 spi

Stm32CubeMX 为 stm32mp135d 添加 spi 一、启用设备1. spi 设备添加2. spi 引脚配置2. spi 时钟配置 二、 生成代码1. optee 配置 spi 时钟和安全验证2. linux spi 设备 dts 配置 bringup 可参考&#xff1a;Stm32CubeMX 生成设备树 一、启用设备 1. spi 设备添加 选中spi设…

如何从0深入PostgreSQL内核写一个执行器算子?

如何从0深入PostgreSQL内核写一个执行器算子&#xff1f; 大家好&#xff0c;我叫光城&#xff0c;昨天分享了一个主题&#xff1a;如何从0深入PostgreSQL内核写一个执行器算子&#xff1f;今天来总结一下&#xff0c;本篇文章的直播回放可以在b站观看&#xff0c;点击原文或者…

【图论】图论基础

图论不同地方讲的不太一样&#xff0c;本文仅限作者的理解 定义 图是一般由点集 V V V 和边集 E E E 组成。 对于 v ∈ V v\in V v∈V&#xff0c;称 v v v 为该图的一个节点。 对于 e ∈ E e\in E e∈E&#xff0c;一般用二元组 ( u , v ) (u,v) (u,v) 表示 e e e&am…

Android 音视频播放器 Demo(二)—— 音频解码与音视频同步

音视频编解码系列目录&#xff1a; Android 音视频基础知识 Android 音视频播放器 Demo&#xff08;一&#xff09;—— 视频解码与渲染 Android 音视频播放器 Demo&#xff08;二&#xff09;—— 音频解码与音视频同步 RTMP 直播推流 Demo&#xff08;一&#xff09;—— 项目…

HFSS19 官方案例教程W03 - SMA接头与微带分支

SMA接头与微带分支 1►射频接头简介 连接器是电子测量中必不可少的重要部件&#xff0c;无论测试仪表还是DUT&#xff0c;无论线缆还是附件&#xff0c;处处都有形形色色的不同连接器的身影。对于射频工程师而言&#xff0c;经常用到的连接器有N型、BNC型、SMA型、3.5 mm、2.…