Qt 中动态加载窗口

news2024/12/27 10:40:58

在编程中,我经常会遇见要根据用户触发按钮,动态生成窗口的情况。在此有两种方法可以动态生成窗口:一:直接在槽函数中调用窗口类。二:将 **.ui 添加到资源文件,通过 QUiLoader 加载。

现将两种方法介绍如下。

在 Qt 中创建 Qt 设计师界面类

一:

1)在函数中实例化窗体 gotocelldialog(也可以不用指针,直接创建变量 gotocelldialog)

2)使用 show 或 exec 方法将其以非模态 / 模态显示。

3)如果是实例化,在退出函数后应使用 delete 释放资源。

void MainWindow::GoToCell()
{
    if ( !dialog_) {
        dialog_ = new GoToCellDialog(this);
    }

    if (dialog_->exec()) {
        ....
    }

    //以下两句可以不写,因为dialog_为类变量,当第一次实例化后,只要程序不退出,dialog_就可一直使用
    delete dialog_;
    dialog_ = 0;
}

二:

1)创建一个 UI 窗体,添加到工程的资源文件中。

2)创建 QFile 对象加载 ui 窗体文件。

3)创建 QUiLodaer 对象 loader。

4)使用 loader 加载窗体文件,并强制转换为对应类型。

5)使用 show 或 exec 方法将其以非模态 / 模态显示。

具体代码如下:

#ifndef CREATINGDYNAMICDIALOG_H
#define CREATINGDYNAMICDIALOG_H

#include <QDialog>

//窗体文件为Qt自动生成,
namespace Ui {
class CreatingDynamicDialog;
}

class CreatingDynamicDialog : public QDialog
{
    Q_OBJECT

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

private:
    void SetupConnections();

private slots:
    void createDynamicDialog();

private:
    Ui::CreatingDynamicDialog *ui;
};

#endif // CREATINGDYNAMICDIALOG_H

调用UI文件。

#include <QUiLoader>
#include <QFile>

//system creating
#include "creatingdynamicdialog.h"
#include "ui_creatingdynamicdialog.h"

#include "dynamicdialog.h"
//需要动态创建的Ui窗体头文件
#include "resource/dynamicdialoginresourcefolder.h"

CreatingDynamicDialog::CreatingDynamicDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::CreatingDynamicDialog)
{
    ui->setupUi(this);

    SetupConnections();

    setAttribute(Qt::WA_DeleteOnClose);
}

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

void CreatingDynamicDialog::SetupConnections()
{
    connect(ui->btn_create_dynamic_dialog_, &QPushButton::clicked,
            this, &CreatingDynamicDialog::createDynamicDialog);
}

void CreatingDynamicDialog::createDynamicDialog()
{
    QUiLoader loader;

    QFile file(":/form/resource/dynamicdialoginresourcefolder.ui");
    if ( !file.open(QFile::ReadOnly)) {
        return;
    }

    //在文件夹下加载ui
    DynamicDialogInResourceFolder* dialog =
            (DynamicDialogInResourceFolder*) loader.load(&file, this);

    //因为Qt自动生成的Ui窗体中没有Q_Object宏,故无法使用“qobject_cast”进行转换。
    /*DynamicDialogInResourceFolder* dialog =
            qobject_cast<DynamicDialogInResourceFolder*>(loader.load(&file, this));*/
    //dialog->setModal(false);
    //dialog->show();

    dialog->exec();
}

 

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

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

相关文章

LAMPDISCUZ论坛

目录 1.1 LAMP 1.2 LAMP架构搭建 2. 关闭防火墙&#xff0c;将安装Apache所需软件包传到/opt目录下 APache的源码编译安装涉及到的软件包&#xff1a; 2.2 安装环境依赖包 2.3 配置软件模块 2.4 添加httpd系统服务 2.5 修改httpd 服务配置文件 3.编译安装mysqld 服务 3.1 …

1. CSS的三大特性

CSS有三个非常重要的三个特性&#xff1a;层叠性、继承性、优先级 1.1层叠性 相同选择器给设置相同的样式&#xff0c;此时一个样式就会覆盖(层叠)另一个冲突的样式。层叠性主要解决样式冲突 的问题 层叠性原则: ●样式冲突,遵循的原则是就近原则,哪个样式离结构近,就执行哪个…

记一次Windows 下Microsoft Store应用权限问题

关键字&#xff1a;windows、 microsoft store 画图 mspaint 终端 terminal Windows11 锁屏界面黑屏 起因 情不知所起&#xff0c;额走错片场了。。。 具体原因无法确定&#xff0c;猜测是由于之前磁盘故障后进行修复导致的权限丢失异常 表象 几乎是所有的Microsoft store的…

Java-反射机制(超详解)

Java反射机制概述 前言一、Java反射机制概述1. Java Reflection2. 动态语言 vs 静态语言二、 Class类的理解1. 类的加载过程1.1 初步了解1.2 类的加载过程图解1.3 了解&#xff1a;什么时候会发生类初始化&#xff1f;1.4 类加载器的作用1.5 JVM中不同类型的类的加载器1.6 代码…

SpringMVC系列-1 使用方式和启动流程

背景 SpringMVC作为SSM组件之一&#xff0c;Java开发有必要了解SpringMVC是如何被集成到Spring框架以及整个项目的启动流程。本文以Tomcat作为Servlet容器进行介绍&#xff0c;默认认为读者使用过Tomcat且对Tomcat内部组件有足够的理解。 1.启动流程 当Tomcat被部署到服务器…

node的安装配置

这个是官网下载地址 推荐选择下载LTS版本的下载&#xff0c;不推荐下载最新版的&#xff0c;下载完成之后&#xff0c;在安装过程中更改安装路径默认是c盘的&#xff0c;如果c盘空间大当我没说&#xff0c;接着一路傻瓜式安装默认点击下一步&#xff0c;直到安装完成。 创建文…

chatgpt赋能python:Python怎样设置字体大小

Python 怎样设置字体大小 作为一名Python工程师&#xff0c;我们经常需要在论文或文档中使用Python进行数据分析&#xff0c;数据可视化和数据科学等方面的工作。在这些文档中&#xff0c;字体大小的设置是非常重要的&#xff0c;因为它直接影响阅读体验和文档的可读性。因此&…

幸运九宫格抽奖码九宫格抽奖系统独立版源码php修复版

&#x1f389; 有需要的朋友记得关赞评&#xff0c;文章底部来交流&#xff01;&#xff01;&#xff01; &#x1f389; ✨ 源码介绍 1.本程序在PHP5.3 ~ PHP5.6环境 2.后台访问地址&#xff1a;域名/admin/index.php U:admin P:admin 手动安装 1.导入1776.sql到数据库 …

【文件操作与IO】认识文件

目录 认识文件 狭义上的文件 广义上的文件 树形结构组织和目录 文件路径&#xff08;Path&#xff09; 其他知识 认识文件 狭义上的文件 硬盘上保存的数据&#xff0c;都是“文件”来组织的&#xff0c;本质上都是二进制或是字符组织的数组&#xff0c;被打包成一个文件…

Git学习笔记(上篇)

导航小助手 一、Git初识 1.1 场景 1.2 版本控制器 1.3 注意事项 二、Git安装 2.1 Linux-centos 2.2 Linux-ubuntu 三、Git基本操作 3.1 创建Git本地仓库 3.2 配置Git本地仓库 3.3 认识工作区、暂存区、版本库 3.3.1 添加文件—场景一 3.3.2 添加文件—场景二 3.4…

chatgpt赋能python:Python怎么重新执行代码

Python怎么重新执行代码 如果你正在学习编程&#xff0c;你可能已经意识到Python是一种非常流行的语言。Python是一种如此强大的编程语言&#xff0c;可以应用于许多领域&#xff0c;从数据分析到游戏开发&#xff0c;甚至是Web开发。但是&#xff0c;在编写Python代码时&…

026.【图形结构算法】

1. 图的定义 树形结构用于描述节点和节点之间的层次关系&#xff0c;而图形结构用于描述两个顶点之间是否连通的关系。在计算机科学中&#xff0c;图形结构是最灵活的数据结构之一&#xff0c;很多问题都可以使用图来求解。 无向图是每条边都没有方向的图&#xff0c;同一个边…

chatgpt赋能python:重新安装Python——让你的编程之路更畅通

重新安装Python——让你的编程之路更畅通 Python是一种高级编程语言&#xff0c;广泛应用于软件开发、数据科学、机器学习等领域&#xff0c;因其易学易用、拥有丰富的第三方库和社区支持而备受程序员们的喜爱。但是&#xff0c;有时候你可能会遇到无法解决的Python问题&#…

Linux 4.10当中将带来深远影响的三项小改变

Linux的演进永不停歇。Linus Torvalds一直在努力工作&#xff0c;希望能够在新的内核版本当中(4.11)融入更多变化。不过在目前的Linux 4.10中&#xff0c;我们同样发现了三组能够有效提升性能并实现多种前所未有功能集的变更。 下面&#xff0c;我们将共同了解这些可能对您、您…

0006-TIPS-2020-hxp-kernel-rop : bypass-KASLR-with-offset_leak

内核默认加载地址&#xff08;不开启KASLR&#xff09; kernel text mapping 在内核linux-5.9/Documentation/x86/x86_64/mm.rst文档中记录了 x86_64虚拟地址空间布局 其中0xffffffff80000000~0xffffffff9fffffff用于存放内核代码段、全局变量、BSS等 ffffffff80000000 | -…

华为OD机试真题 JavaScript 实现【字符串序列判定】【2022Q4 100分】,附详细解题思路

一、题目描述 输入两个字符串a和b&#xff0c;都只包含英文小写字母。a长度<100&#xff0c;b长度<500,000。 判定a是否是b的有效子串。 判定规则&#xff1a; a中的每个字符在b中都能找到&#xff08;可以不连续&#xff09;&#xff0c;且a在b中字符的前后顺序与a中…

【SQL应知应会】分析函数的点点滴滴(一)

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 分析函数的点点滴滴 1.什么是分析函数&#xff1a;…

万字详解常用设计模式

本文是博主在工作中对常用设计模式的使用经验总结归纳而来分享给大家。 设计模式一共有23种&#xff0c;本文讲解涉及如下&#xff1a; 责任链模式 模板方法模式 发布订阅模式 策略模式 三大分类 业界一般将设计模式分为三大类&#xff1a; 创建型模式&#xff1a;对类的实…

chatgpt赋能python:Python怎样调字体大小以及优化网站SEO

Python怎样调字体大小以及优化网站SEO 在现代网络时代&#xff0c;网站的排名和SEO越来越受到关注。有一些关键词和技巧可以用来在搜索引擎排名中获得好的位置。其中一个技术是调整字体大小。在本文中&#xff0c;我们将深入探讨如何使用Python调整字体大小&#xff0c;并进一…

chatgpt赋能python:Python如何随机产生多个随机数?

Python如何随机产生多个随机数&#xff1f; Python是一种高级编程语言&#xff0c;它的随机数生成器是其强大的功能之一。在本文中&#xff0c;我们将学习如何使用Python随机数生成器生成多个随机数。 基本概念&#xff1a;随机数生成器 随机数生成器是一种算法或物理设备&a…