首页 > 其他分享 >Vs+Qt添加ui子页面

Vs+Qt添加ui子页面

时间:2024-08-12 13:38:09浏览次数:14  
标签:界面 Qt SubDialog Vs ui 按钮 QtWidgetsApplication1

在Qt项目中,如果要实现一个弹出子界面并包含返回按钮的功能,最合适的选择是使用 Qt Dialog Form File 来创建子界面。

Qt Dialog Form File 与 Qt Widget Form File 的区别

Qt Dialog Form File (Button Bottom) 和 Qt Dialog Form File (Button Right):
这两种文件类型用于创建对话框(Dialog),其中包含了默认的按钮布局:
Button Bottom:按钮(如“OK”、“Cancel”)默认在对话框底部。
Button Right:按钮默认在对话框右侧。
对话框通常用于弹出窗口,它可以模态(阻塞父窗口的交互)或非模态。对话框有自己的事件循环,可以独立于主窗口运行,且在关闭时可以直接销毁。在 Qt Dialog Form File 中也可以显示 QOpenGLWidget 等窗口类型。

Qt Widget Form File:
这种文件类型用于创建一个普通的窗口部件(Widget),可以是主窗口的一部分,也可以作为独立窗口使用。和对话框不同,它没有自己的事件循环,因此更适合作为主窗口的一部分,而不是独立弹出的子界面。

VS+Qt添加ui子界面示例

基本功能:
在qtwidgetsapplication1.ui主界面中添加确认按钮,点击确认按钮能弹出一个子界面,子界面中也有返回按钮,点击返回子界面消失。

  1. 添加ui文件
    image

image

  1. 修改ui界面对象名称并删除所有原先槽函数,根据需要修改按钮名称
    image

  2. 主ui界面中添加按钮并修改名称
    image

  3. 添加子窗口对应类文件并修改类的头文件属性
    image

image

image

image

  1. 添加程序代码
# qtwidgetsapplication1.cpp
#include "qtwidgetsapplication1.h"
#include "subdialog.h"

QtWidgetsApplication1::QtWidgetsApplication1(QWidget* parent)
    : QWidget(parent), subDialog(nullptr)  // 初始化子界面指针为 nullptr
{
    ui.setupUi(this);
    connect(ui.confirmButton, &QPushButton::clicked, this, &QtWidgetsApplication1::onConfirmButtonClicked);
}

QtWidgetsApplication1::~QtWidgetsApplication1() {
    if (subDialog) {
        delete subDialog;  // 清理子界面
    }
}

void QtWidgetsApplication1::onConfirmButtonClicked() {
    if (!subDialog) {
        subDialog = new SubDialog(this);  // 创建子界面实例
    }
    subDialog->show();  // 显示子界面
}
# qtwidgetsapplication1.h
#pragma once

#include <QtWidgets/QWidget>
#include "subdialog.h"  
#include "ui_qtwidgetsapplication1.h"

class QtWidgetsApplication1 : public QWidget {
    Q_OBJECT

public:
    QtWidgetsApplication1(QWidget* parent = nullptr);
    ~QtWidgetsApplication1();

private slots:
    void onConfirmButtonClicked(); 

private:
    Ui::QtWidgetsApplication1Class ui;
    SubDialog* subDialog;  
};
# subdialog.cpp
#include "subdialog.h"

SubDialog::SubDialog(QWidget* parent)
    : QDialog(parent) {
    ui.setupUi(this);
    connect(ui.returnButton, &QPushButton::clicked, this, &SubDialog::onReturnButtonClicked);
}

SubDialog::~SubDialog() {}

void SubDialog::onReturnButtonClicked() {
    this->close();  
}
# subdialog.h
#pragma once

#include <QDialog>
#include "ui_subdialog.h"

class SubDialog : public QDialog {
    Q_OBJECT

public:
    explicit SubDialog(QWidget* parent = nullptr);
    ~SubDialog();

public slots:
    void onReturnButtonClicked();  // 返回按钮的槽函数

private:
    Ui::SubDialog ui;
};
  1. 运行即可
    image

说明:运行后可查看系统自动生成的ui_xxx.h文件
image

标签:界面,Qt,SubDialog,Vs,ui,按钮,QtWidgetsApplication1
From: https://www.cnblogs.com/Yami-Wa/p/18354803

相关文章

  • vs2022 x64 C/C++和汇编混编 遇到的坑
    vs2022x64C/C++和汇编混编遇到的坑遇到的问题二、问题复现1.出错代码2.问题分析2.1堆栈对齐问题3.解决方案总结奇数和偶数个寄存器的影响为什么`subrsp,8`对奇数个寄存器有用?结论遇到的问题0x00007FFFFAE24A29(msvcp140.dll)处(位于TestCompileConsol......
  • 【深海王国】初中生也能画的电路板?番外1:Arduino其他家族成员的拓展板开发(4)
    Hi~(o^^o)♪,各位深海王国的同志们,早上下午晚上凌晨好呀~辛苦工作的你今天也辛苦啦(/≧ω)今天大都督继续为大家带来电路板的番外系列——初中生也能画的电路板?番外1:Arduino其他家族成员的拓展板开发,带你给其他Arduino家族成员如ProMini、Mega2560等,进行拓展版DIY开发,l......
  • centos7 Qt 缺失字体问题
    QFontDatabase:Cannotfindfontdirectory/usr/local/Qt-5.11.3/lib/fontsNotethatQtnolongershipsfonts.Deploysome(fromhttps://dejavu-fonts.github.io/forexample)orswitchtofontconfig.解决下载dejavu-fonts-ttf-2.37.tar.bz2创建目录并拷贝所有ttf......
  • 一款强大的burpsuite漏洞扫描插件--gatherBurp
    一款强大的burpsuite漏洞扫描插件目前功能fastjson扫描权限绕过扫描未授权检测扫描sql注入检测多层级路由扫描工具调用log4j检测复杂数据提交一键生成nuclei模板生成指定kb大小的随机字符串代理池功能子域名收集(复刻https://github.com/Acmesec/Sylas)使用说明请使用m......
  • 华为pura70pro+ vs VIVO x100s pro
    华为pura70pro+vsVIVOx100spro简介最近主力机不是很给力,老是发热卡顿,影响我正常的使用,于是有了换手机的想法。作为数码爱好者,有着使不完的折腾劲,我从三千块多的手机研究到了七八千的手机,从红米到小米,从oppo、vivo到华为等等等等研究了个遍。在五花八门的手机里面,我最看好的......
  • 【OpenCV】window 下 VS Code 配置OpenCV
    文章目录前言直接使用OpenCV编译好的库自己编译OpenCV前言在网上找了些资料,大致得出VSCode开发OpenCV的环境配置流程,如下安装VSCode安装MinGW安装CMake下载OpenCV配置OpenCV配置VSCode曾经在公司用过OpenCV,貌似并没有编译这一步,不明所以以下是GPT的回答:使......
  • How to buildORB-SLAM on ubuntu in 2024?
    1removeGTK3sudoaptremovelibgtk3*2installopencvdepenenciessudoaptinstallbuild-essentialcmakegitpkg-configlibgtk-3-dev\libavcodec-devlibavformat-devlibswscale-devlibv4l-dev\libxvidcore-devlibx264-devlibjpeg-devlibpng-devlibt......
  • MAUI Blazor学习17-NavigationLock阻止页面回退
    MAUIBlazor学习17-NavigationLock阻止页面回退 MAUIBlazor系列目录MAUIBlazor学习1-移动客户端Shell布局-SunnyTrudeau-博客园(cnblogs.com)MAUIBlazor学习2-创建移动客户端Razor页面-SunnyTrudeau-博客园(cnblogs.com)MAUIBlazor学习3-绘制ECharts图表-S......
  • pyqt5+win32+python联合在CAD绘图无法绘制
    1初始报错想法是:写好pyqt5的简单界面代码后,用一个信号槽连接到CAD绘制图形。出现了报错:显示“已成功连接到CAD”,说明连接没有问题,但是“在CAD中绘制线条时出错:(-2147352567,'发生意外。',(0,None,None,None,0,-2147024809),None)”。搜索后给出可能原因是:1-参......
  • 【qt】计算器的实现
    1.计算器界面设计由图可知,我们需要20个按钮,一个行编辑文本。先摆放好按钮位置,再使用栅格布局按钮全选中使用栅格布局,使其整齐些接着修改按钮数字,可以按照计算器格式摆放接着我们修改每个对象的名称,待会写代码比较方便,数字的话,直接是onebutton,twobutton…删除......