QT实现按钮开关Form窗体的效果

news2025/1/2 3:08:59

实现效果叙述如下: MainWindow中的按钮实现Form窗体的开关,Form窗体的关闭按钮禁用掉,只允许使用窗体按钮进行,且关闭MainWindow按钮时Form窗体随之关闭。

请添加图片描述

注意: 要想实现关闭MainWindow按钮时Form窗体随之关闭,Form窗体的close()MainWindow的析构函数中无法实现,需要将其写入MainWindow的关闭事件中。

废话不多说,直接上代码:


main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

form.c

#include "form.h"
#include "ui_form.h"

Form::Form(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form)
{
    ui->setupUi(this);
    setWindowFlags(Qt::CustomizeWindowHint |
                   Qt::WindowMinimizeButtonHint |
                   Qt::WindowMaximizeButtonHint);   // 禁用Form窗体的关闭按钮
}

Form::~Form()
{
    delete ui;
}


mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void closeEvent(QCloseEvent *); // 重写MainWindow的关闭事件

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H


mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "form.h"
#include <QDebug>

static bool newWinFlag = false;
Form *configWindow = NULL;


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    configWindow = new Form;
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::closeEvent(QCloseEvent *e)
{
    configWindow->close(); // 此处为了实现关闭MainWindow的同时也关闭Form窗体
}

void MainWindow::on_pushButton_clicked()
{
    qDebug() << newWinFlag;
    newWinFlag = !newWinFlag;
    if(newWinFlag == true)
    {
        configWindow->show();
        return;
    }
    else
    {
        configWindow->close();
        return;
    }

}


form.h

#ifndef FORM_H
#define FORM_H

#include <QWidget>

namespace Ui {
class Form;
}

class Form : public QWidget
{
    Q_OBJECT

public:
    explicit Form(QWidget *parent = 0);
    ~Form();

private:
    Ui::Form *ui;
};

#endif // FORM_H

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

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

相关文章

【Android知识笔记】系统进程(一)

Android 系统进程有哪些 先来一个整体结构图从宏观上理解Android系统的进程结构布局: 这里我们简单总结一下: 系统的第一个进程其实是0号进程(又叫swapper进程/Idle进程) 0号进程fork出了1号进程(init进程)和2号进程(kthreadd进程) 1号进程是所有普通用户进程的祖先,2号进程…

Docker部署前后端分离项目

✅作者简介&#xff1a;大家好&#xff0c;我是Cisyam&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Cisyam-Shark的博客 &#x1f49e;当前专栏&#xff1a; 项目部署 ✨特色专栏&…

K8s生产环境常见问题处理、答疑(连载、不定期更新)

文章目录 K8s 常见问题处理、答疑[1] calico一直处于未就绪状态[2] 删除dashboard 一直卡在delete[3] k8s-dashboard 修改tocken-ttl避免频繁输入tocken[4] kubectl 快捷指令[5] 解决UTC时间问题[6] kubectl命令自动补全[7] kubectl exec进入pod[8] 使用hostpath解决容器UTC时间…

LibreOffice 在win11(高版本win10)无响应的解决方案

问题描述 某次windows升级了以后&#xff0c;LibreOffice无法启动无响应、无报错 解决 安全模式启动 然后禁用显卡加速 然后&#xff1a;应用更改并重新启动 即可以正常模式启动LibreOffice

ARP协议(地址分析协议)

系列文章目录 数通王国历险记&#xff08;4&#xff09; 目录 前言 一&#xff0c;什么是地址解析协议&#xff08;ARP&#xff09; 二&#xff0c;封装和解封装 三&#xff0c;为什么需要地址解析协议&#xff08;ARP&#xff09; 四&#xff0c;ARP的验证实验 4.1&#x…

MySQL 学习笔记 4:视图

MySQL 学习笔记 4&#xff1a;视图 图源&#xff1a;ubiq.co 简单的说&#xff0c;视图就是“固化的SQL查询”。 这里看一个简单示例&#xff0c;我们有一个表&#xff0c;保存学生信息&#xff1a; mysql> select * from student limit 10; ---------------------------…

利用电价运行策略研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

外观模式:简化复杂系统的访问接口

外观模式是一种结构型设计模式&#xff0c;它提供了一个统一的接口&#xff0c;用于访问复杂系统中的一组接口。本文将深入探讨外观模式的原理、结构和使用方法&#xff0c;并通过详细的 Java 示例代码来说明。 1. 外观模式的定义 外观模式是一种通过提供一个简化的接口&…

LoggerFactory is not a Logback LoggerContext but Logback is on the classpath

springboot项目报错如下&#xff1a; 这个错误是由于在你的Java代码中使用了Logback日志库&#xff0c;但是同时又存在与Logback竞争的其他日志库&#xff08;例如slf4j-simple&#xff09;导致的冲突。 要解决这个问题&#xff0c;你可以尝试以下几个步骤&#xff1a; 1. 检…

计算机网关原理、子网掩码原理(路由器、交换机)(网关:与以太网接口关联的路由)

文章目录 网关网关的历史网关的功能网关的原理相关疑问为什么用子网掩码与IP地址进行与运算来确定一个IP地址所属的子网&#xff1f;网关地址是谁定的&#xff0c;是配置路由的人随意定的吗&#xff1f;&#xff08;配置人员定的&#xff09;如何正确设置网关地址&#xff08;路…

WPF 如何引入图标文件

文章目录 前言&#xff1a;WPF 引入图标什么是ttf字体阿里云矢量库下载WPF引用为什么文件路径是#iconfont而不是iconfont。前面为什么要带个#号&#xff1f; 前言&#xff1a; 我最近在研究WPF&#xff0c;吃饭嘛&#xff0c;桌面端实在是不想用Winform&#xff0c;太丑了。WP…

WebDAV之π-Disk派盘+Notability

Notability 支持WebDAV方式连接π-Disk派盘。 Notability是一款功能强大的数字笔记应用,适用于iOS和macOS。它提供了优秀的手写体验,支持手写、录音和多种标记。用户可以记录想法、思路、绘图和草图,进行注释和标记,实现高效的学习和创作。同时,Notability具有文本输入、…

16 Java获取随机数

使用new Random创建一个随机数对象&#xff0c;然后调用里面的nextInt方法&#xff0c;方法中传入一个数字n&#xff0c;则随机数的范围为[0,n&#xff09;。代码如下&#xff1a; package demo;import java.util.Random;public class Demo10 {public static void main(String…

xilinx zc706 以太网性能测试(iperf)

一&#xff1a;概述 以太网流量测试是一种评估网络性能和容量的测试方法。它通过模拟实际网络环境中的数据流量&#xff0c;以确定网络在高负载情况下的表现。 在以太网流量测试中&#xff0c;可以使用各种工具和技术来生成和控制数据流量。这些工具可以模拟不同类型的流量&a…

C#基础学习_集合中对象的动态排序

C#基础学习_集合中对象的动态排序 上一期我们了解了Icompare这种默认的排序方法,本次我们学习一下比较器ICompare的应用(可以替代Icompare这种默认的排序方法) 因为默认排序,只能有一种,使用起来可能会有局限性。 此时需要添加比较器: 根据需要,在需要实现动态排序的类…

生产管理“看得见“,这些车间工具必不可少!

工厂可视化是精益管理的重要组成部分&#xff0c;可视化的工厂管理可以从侧面提高员工精益生产的意识&#xff0c;那么工厂车间哪些方面可以做可视化管理呢&#xff1f; 目视化管理包括了三个内容&#xff1a; 1、管理规则的目视化&#xff1a;如通道线、安全警示、作业指导书…

掌握AI图像篡改检测工具,轻松识别图片造假

文章目录 一、前言1.1 背景与危害1.2会议探讨1.3 技术先行 二、亮点技术1&#xff1a;AI图像篡改检测技术2.1 传统方法Python实现步骤2.2 合合信息——PS纂改检测体验 三、亮点技术2&#xff1a;生成式图像鉴别3.1 生成式图像安全问题3.2 传统方法Python实现步骤3.2 合合信息—…

力扣 376. 摆动序列

题目来源&#xff1a;https://leetcode.cn/problems/wiggle-subsequence/description/ C题解1&#xff1a;使用flg标记第一个是增还是减&#xff0c;如果是平&#xff0c;则直接返回1&#xff1b;根据标记的flg&#xff0c;不断更新顶峰值和谷底值&#xff0c;直到最高或者最低…

LabVIEW使用数据引用减少内存

概览 NI LabVIEW 省略了 开发 软件时 需要 手动 管理 内存。LabVIEW 编译器 始终 会 分析 您 的 代码&#xff0c; 以 确定 如何 优 化 性能 并 减少 所需 的 内存 量。但是&#xff0c; 想要 更多 控制 内存 分配 的 高级 用户 可以 在 LabVIEW 2009 中创建 数据 引用。 内容…

记录一些杂七杂八的数据分析

1、数据库的独立性 --模式与内模式的映射 保证数据库物理结构的独立性 --模式与外模式的映射 保证数据库逻辑结构的独立性 2、常见的数据库 Oracle数据库&#xff0c;SQL Server数据库&#xff0c;MySQL数据库&#xff0c;PostgreSQL数据库。 &#xff13;、数据分类 &…