在Qt中如何使用QtDesigner创建的UI文件(一)

QT界面.ui文件的格式初步学习 工作流程 Xml 格式的 X.ui 文件 -> 预编译为 ui_X.h 文件 -> 通过 namespace Ui 引入项目 X.h 文件中 X.ui 是由 QT Designer 生成的界面文件. ui_X.h 是由预编译器生成的中间文件, 此文件不会显示在项目文件中. X.h 中通过定义 namespace Ui 前导声明引用 ui_X.h 文件中的 X 类, 同时定义私有的 X... 阅读详情
AI摘要

本文详细介绍了在Qt应用中使用UI文件的方法,包括直接方法、单继承方式和多继承方式,并讨论了界面文件与代码之间的交互,以及如何在不同场景下灵活运用这些方法,特别强调了在不理解内部机制的情况下可能会遇到的问题及解决方案。

        使用Qt有一些时间了,一直在IDE环境(qtcreator和VS2003+集成器)中使用,自然少了很多麻烦的步骤。但是在享受这种便利的同时,我们也失去了理解更多知识背后的点滴。在IDE中,如果我们要开发一个对话框,通常是使用 “新建—>Qt—>Qt设计师界面类” 这样IDE会自动的帮我们生成三个文件(filename.ui, filename.h,filename.cpp)。qmake也非常智能,可以自动检测到这个用户界面文件(filename.ui)并且生产适当的makefile规则。这样在编译之前,IDE会自动调用uic(Qt自带的用户界面编译器,User Interface Compiler)将界面文件(filename.ui)转换成C++代码并保存在ui_filename.h文件中。并且在另外两个C++源文件(filename.h和filename.cpp)中使用了组合(即委托或代理)的方式使用了ui_filename.h里的类(该类通常定义在命名空间Ui下)。

        如果你不主动的留心这些细节,你可能永远都不明白这些,即使使用了多年的Qt,我就是这样。一次,项目组的需求人员嫌弃我们开发人员做的界面布局不够恰当,美观。于是有了自己来开发界面的想法。很好!开发人员很快手把手的教会了需求人员用Qt Designer设计窗体界面,然而,等到需求人员把 pureui_filename.ui文件扔给我们开发人员使用时,我们顿时傻了眼,怎么用?于是使用了一个最愚蠢当然也是最简单的办法: 还是和之前一样,通过IDE“新建—>Qt—>Qt设计师界面类”生成与“pureui_filename.”同名的文件,然后用需求人员给的pureui_filename.ui替换IDE自动生成的 *.ui 文件。虽然转了一个小弯,但目的达到!

       后来想想,总觉得多少有些遗憾,于是查阅了Qt文档之Using a Designer UI File in Your Application

       在这个文档中,详细说明了在应用程序中使用UI文件的方法。

一、直接的方法(The Direct Approach)

     即把filename.ui经过uic转换后的C++代码文件ui_filename.h直接包含,使用其里面Ui命名空间下的类(名称和主窗体的objectname相同,这里假设为GoToCellDialog)。

 #include "ui_gotocelldialog.h"    // uic工具将gotocelldialog.ui生成的C++代码

 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);

     QDialog *dialog= new QDialog;  // 用于显示界面的父窗体QDialog(QWidget的子类) 
      Ui::GotoCellDialog ui;  // 界面类,必须显示在一个QWidget(或其子类)上
      ui.setupUi(dialog); // 将QDialog设置为 GotoCellDialog 的父窗体,这样GotoCellDialog 里面定义的控件就会显示在QDialog窗体内

      dialog->show();
     return app.exec();
 }

二、单继承方式(The Single Inheritance Approach)

       单继承方式是相对于后面要讲的多继承方式,单继承方式也称组合(即委托或代理)方式。单继承方式简单来说就是在代码中首先要自定义一个子类(例如下文中的GoToCellDialog类),该类要从form对应的窗体类(或其兼容的子类)派生;并用ui生成的类定义一个类里的成员变量,该成员变量可以是值也可以是指针,根据使用成员变量的形式不同,又分为成员变量和指针成员变量两种形式。这样在GoToCellDialog的构造函数中可以直接调用ui和ui中的变量和函数,使用起来很方便。

1、使用成员变量

      即将 Ui::GotoCellDialog ui; 作为类GotoCellDialog(只继承自QDialog,单一继承)的成员变量。这里有一点值得注意的地方,就是ui文件提供的类被包含在了名为Ui的name space里,这样做的目的是将ui文件的命名空间与用户的代码分离,避免两者出现命名冲突的情况。

头文件: gotocelldialog.h

#include <QDialog>
#include "ui_gotocelldialog.h" // 因为是成员变量形式,必须包含相应的头文件
 
class GoToCellDialog: public QDialog
 {
     Q_OBJECT

 public:
    explicit GoToCellDialog(QDialog *parent = 0);

 private slots:
     void on_lineEdit_textChanged();

 private:
     Ui::GoToCellDialog ui;
 };

实现文件: gotocelldialog.cpp

#include "gotocelldialog.h"

#include <QtGui>

GoToCellDialog::GoToCellDialog(QWidget *parent)
    : QDialog(parent)
{
    ui.setupUi(this);  

    QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
    lineEdit->setValidator(new QRegExpValidator(regExp, this));

    connect(okButton, SIGNAL(clicked()), SLOT(accept()));
    connect(cancelButton, SIGNAL(clicked()), SLOT(reject()));
}

void GoToCellDialog::on_lineEdit_textChanged()
{
    // bool	hasAcceptableInput () const
    // This property holds whether the input satisfies the inputMask and the validator.
    // By default, this property is true.
    okButton->setEnabled(lineEdit->hasAcceptableInput());
}


2、使用指针成员变量
       与成员变量形式相似,唯一不同的是,将Ui::GoToCellDialog声明为指针成员,即 Ui::GoToCellDialog *ui;

因此,相应的头文件中只要前置声明即可:

namespace Ui 
{ 
    class GoToCellDialog; 
} // 前置声明即可,只在实现文件中包含相应的头文件 

class GoToCellDialog: public QDialog
{ 
      // 同上 
 private: 
       Ui::GoToCellDialog *ui; 
};

实现文件:

#include "ui_gotocelldialog.h"

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

 CalculatorForm::~CalculatorForm()
 {
     delete ui; // 切记删除,释放资源
 }

 三、多继承方式(The Multiple Inheritance Approach)
        多继承方式就是自定义的类从窗体类和Ui类多重派生。看代码就清楚了:

头文件:

#ifndef GOTOCELLDIALOG_H
#define GOTOCELLDIALOG_H

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

class GoToCellDialog :  public QDialog, public Ui::GoToCellDialog
{
    Q_OBJECT

public:
    explicit GoToCellDialog(QWidget *parent = 0);

private slots:
    void on_lineEdit_textChanged();
};

#endif // GOTOCELLDIALOG_H


实现文件:

#include "gotocelldialog.h"

#include <QtGui>

GoToCellDialog::GoToCellDialog(QWidget *parent)
    : QDialog(parent)
{
    this->setupUi(this); //第1个this指Ui::GoToCellDialog,第2个this指(QDialog) 即 Ui::GoToCellDialog->setupUi(QDialog)

    QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
    lineEdit->setValidator(new QRegExpValidator(regExp, this));

    connect(okButton, SIGNAL(clicked()), SLOT(accept()));
    connect(cancelButton, SIGNAL(clicked()), SLOT(reject()));
}

void GoToCellDialog::on_lineEdit_textChanged()
{
    // bool	hasAcceptableInput () const
    // This property holds whether the input satisfies the inputMask and the validator.
    // By default, this property is true.
    okButton->setEnabled(lineEdit->hasAcceptableInput());
} 


PS:关于UI界面中的国际化

       如果用户界面语言发送了改变,Qt通过发送 QEvent::LanguageChange 事件通知应用程序。为了调用 retranslateUi() 函数以达到切换语言的目的,我们需要重新实现界面类里面的QWidget::changeEvent() 事件处理函数。

Reacting to Language Changes

Qt notifies applications if the user interface language changes by sending an event of the type QEvent::LanguageChange. To call the member function retranslateUi() of the user interface object, we reimplement QWidget::changeEvent() in the form class, as follows:

 

 void CalculatorForm::changeEvent(QEvent *e)
 {
     QWidget::changeEvent(e);
     switch (e->type()) {
     case QEvent::LanguageChange:
         ui->retranslateUi(this);
         break;
     default:
         break;
    }
 }


 

使用Qt Creator自带的Qt Designer构造UI界面流程总结 在本文中,我们将总结使用Qt Creator自带的Qt Designer构造UI界面的流程。在对话框中,您可以选择一个控件的信号,然后将其连接到另一个控件的槽。例如,您可以将按钮的点击信号连接到一个槽函数,以响应按钮的点击事件。右键单击窗口设计器中的空白区域,选择适当的布局管理器,如水平布局、垂直布局或网格布局。在Qt Designer中,您可以使用各种预定义的UI控件来设计应用程序的界面。现在,您可以在应用程序的源代码中使用生成的UI界面。在您的源文件中,包含相应的头文件,然后创建一个UI界面的实例。 阅读详情

相关推荐

使用Qt Creator创建用户界面(UI)编程

通过这个简单的示例,您可以看到Qt Creator是一个功能强大且易于使用的工具,可帮助您轻松创建和编辑用户界面。您可以根据自己的需求添加更多的控件和功能,并使用Qt的丰富功能来构建功能强大的应用程序。在弹出的对话框中,选择“Qt Widgets应用程序”模板,并点击“选择”按钮。然后,为您的项目选择一个合适的名称和路径,最后点击“下一步”。在我们的示例中,我们希望当按钮被点击时,标签的文本发生变化。如果一切顺利,应用程序将被成功构建。在Qt Creator的“编辑”模式下,您可以实现和编辑槽函数的代码。

2301_79326588的博客 1500

如何使用Qt Designer生成的ui文件

进行Qt应用程序开发时,经常利用Qt Designer来进行图形用户界面的设计工作。利用它进行图形界面的设计工作有着直观、方面、易于后期维护的优点。

华清远见 | 程序员的学习天堂 5906

I2S时序及音频驱动

I2S、音频驱动

qq_41882586的博客 3947

QT ui编辑器的ui文件生成相应头文件

QT ui编辑器的ui文件生成相应头文件 用ui编辑器去编辑窗口确实少很多代码的功夫,不过本人喜欢用自己桥的代码来实现 但是苦于自己空间想象能力不好,于是 ,我想到 ,用ui编辑好,然后 ui文件编译成 头文件继续用 第一将编辑好的ui文件放入一个文件夹 第二打开cmd cd指令移动到刚才的目录底下 然后指令uic xxxx.ui -o xxxxx.h 生成相应的头文件 然后就可以把该头文件移动到自己想要的工程底下使用 ...

lspdd的博客 1359

Aurora8b10b光口通信实战:复位时序与IP核配置详解

本文深入解析了Aurora 8B10B协议在FPGA高速光口通信中的核心实践,重点剖析了确保链路稳定启动的关键复位时序与IP核配置细节。通过详解全双工与单工模式下的复位流程、Vivado中IP核的物理层与链路层参数设置,并结合用户逻辑设计实例,为工程师实现可靠的高速数据传输提供了清晰的实战指南。

weixin_29280219的博客 177

手把手调试AD9653的LVDS数据采集:从VIO抓波形到用F0/F8帧对齐的实战心得

本文详细介绍了AD9653高速ADC与Xilinx 7系列FPGA(如7z035)的LVDS数据采集调试实战经验。从硬件环境搭建、Vivado工具链配置到LVDS数据对齐技巧,重点分享了利用VIO抓取波形和使用F0/F8帧对齐的实用方法,帮助工程师快速解决高速数据采集系统中的信号完整性问题。

weixin_29169899的博客 702

designer生成的 调用qt_在Qt中如何使用QtDesigner创建的UI文件(一) (转)

使用Qt有一些时间了,一直在IDE环境(qtcreator和VS2003+集成器)中使用,自然少了很多麻烦的步骤。但是在享受这种便利的同时,我们也失去了理解更多知识背后的点滴。在IDE中,如果我们要开发一个对话框,通常是使用 “新建—>Qt—>Qt设计师界面类” 这样IDE会自动的帮我们生成三个文件(filename.ui, filename.h,filename.cpp)。qmake...

weixin_39615596的博客 502

STM32 AFIO时钟开启时机与复用功能解析

在嵌入式系统开发中,GPIO复用是微控制器外设配置的核心技术之一。通过复用功能,单个物理引脚可以动态切换不同功能模式,如USART通信或普通IO。其实现原理依赖于芯片内部的时钟树架构和寄存器配置机制。AFIO(Alternate Function I/O)模块作为STM32的特色设计,专门处理引脚重映射、外部中断配置等高级功能。正确理解复用功能与AFIO时钟的关系,能显著提升嵌入式开发效率,避免资源浪费。本文以STM32为例,结合引脚重映射和USART配置等典型场景,详解AFIO时钟的实际应用规范与优化实践

weixin_42389113的博客 578

在Qt中如何使用QtDesigner创建的UI文件(一) (转)

使用Qt有一些时间了,一直在IDE环境(qtcreator和VS2003+集成器)中使用,自然少了很多麻烦的步骤。但是在享受这种便利的同时,我们也失去了理解更多知识背后的点滴。在IDE中,如果我们要开发一个对话框,通常是使用 “新建—>Qt—>Qt设计师界面类” 这样IDE会自动的帮我们生成三个文件(filename.ui, filename.h,filename.cpp)。qmake...

weixin_30900589的博客 108

YOLOV5 自动刷图脚本实战(十五)之如何找到正确的门

DXF是一个2D游戏,我们所看到的人物移动,其实是后面的背景在移动,我们所看到的画面,不过是一个完整背景中的一个镜头视角而已想要正确找到门的坐标,我们需要对不同的地图中的每个房间做一些配置信息。

qq_38892949的博客 2808

高通 vs MTK vs 海思:三大平台 ISP 架构横向对比与实战差异分析

随着移动影像能力成为智能终端差异化竞争的核心维度,ISP(Image Signal Processor)架构日益重要。高通、MTK、海思三大 SoC 厂商在 ISP 设计上各具特色,不仅在图像处理链路、模块集成度、算法加速路径等方面存在显著差异,同时也决定了终端厂商在成像质量、调试复杂度与扩展能力上的实际表现。本文将基于真实平台项目经验,横向对比三大主流平台的 ISP 架构关键指标,系统分析其在实际开发过程中的能力边界、工程成本与调优空间,帮助工程师更精准地进行平台选型与优化策略制定。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3926

Qt UI创建方法

 http://blog.youkuaiyun.com/zzwdkxx/article/details/25823363 Qt程序两种制作页面的方式 1:自己通过代码实现,创建控件,添加布局管理器。 Widget::Widget(QWidget *parent)     : QWidget(parent) {     label1 = new QLabel(this);     label

书山有路勤为径 1639

Dify 本地部署教程

到这里,Dify 就安装完成了,更多操作设置可以参考官方文档,Dify 和 FastGPT 基本上差不多,也可以同时安装一下 FastGPT 进行体验~Docker Compose 部署 | Dify。

Muti-Agent 6650

Qt中如何使用QtDesigner创建UI文件

原文地址:http://blog.youkuaiyun.com/e5max/article/details/9869977 使用Qt有一些时间了,一直在IDE环境(qtcreator和VS2003+集成器)中使用,自然少了很多麻烦的步骤。但是在享受这种便利的同时,我们也失去了理解更多知识背后的点滴。在IDE中,如果我们要开发一个对话框,通常是使用 “新建—>Qt—>Qt设计师界面类” 这样IDE会自动的

1859

从矩阵理论角度理解偏最小二乘回归,以及在脑科学中(脑影像与行为、基因表达的关系)的应用举例

偏最小二乘法 (PLS) 是一种多元数据驱动的统计技术,旨在提取表示最大大脑行为关联的潜在变量(或潜在成分 latent components [LC])。

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 975

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【Qt】将QtDesigner生成的.ui文件转化为.h头文件

通过uic.exe将ui文件转化为h头文件: uic widget.ui -o ui_widget.cpp 和uic widget.ui -o ui_widget.h的内容都是头文件!生成的头文件,建议采用ui_名称.h,因为这种方式是Qt默认的通用方式。但.cpp的后缀会误导初学者,所以建议规范方式是文件后缀显示的表明文件内容,将其保存widget.ui文件,其中.ui文件是xml格式的内容。

jn10010537的博客 6501

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Qt/GUI开发/.ui 文件的本质是什么?如何灵活使用UI文件!

该文尝试QtIDE下ui文件的本质,包括ui文件内容接结构解析,ui文件编译后的中间文件结构解析。如何混合使用QtUI设计器和手写布局编写GUI界面,以达到较好的开发效率和人机效果。灵活的将多个UI绘制显示控制在一张窗口中。

Dahe.qu 1537

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

python怎么使用qtdesigner_python的qt-designer教程/python怎么使用qtdesigner设计的ui

PyQt Designer设计出来的界面怎么和python 代码结合起来保存为.ui的文件后,可pyqt的文件里直接引用。具体实如果你是在win下装自带Pyqt的demo,参看下源码就可以,如果是Unix里,可以去官网下份单独的tar.gz的包,里面也有demo部分的源码uic.loadUi 方法可以导入ui文件但是我发现,在众多的PyQt demo里面只用到.ui 文件的例子只是占了一部分,并不...

weixin_39732249的博客 1534

【Qtdesigner】在QTdesigner中编写的ui界面如何转换成.py文件

Q:在QTdesigner中编写的ui界面如何转换成.py文件?A:在Qt Designer中创建的UI界面会保存为.ui文件格式。为了在Python代码中使用这些界面,你需要将.ui文件转换成Python文件(即.py文件)。这是通过pyuic工具实现的。pyuic是PyQt提供的一个命令行工具,用于将Qt Designer生成的.ui文件转换为Python代码。

qq_43167394的博客 2823

PyQt里QTdesigner的设置与UI文件转Python的方法

一、 QTdesigner 的设置 二、使用 UI 文件加载界面 三、转换 UI 文件为 Python 代码 四、使用 Python 代码加载 UI 界面

weixin_44452221的博客 3752

pyqt5中使用QtDesigner生成ui文件

1. 下载并安装python33     你可以安装到任意目录下,笔者这里安装到D:/SDK/python33/下。     安装完成后需要将python的安装路径添加到Path环境变量中,     这样当你需要使用python工具时候就不需要每次都跳转到python安装目录下。 2. 下载并安装PyQt5     注意:PyQt的版本版本必须与python的版本一致,     如果p

Android开源技术交流 6559

Qt C++手动创建.ui文件并且与类进行绑定

前言:有的时候做一些新的窗口时,创建完.cpp和.h后发现没有.ui文件,有些控件纯代码实现就比较费时间,而且微调很麻烦。以下时近一段时间总结的手动给类创建.ui文件并且与所创建的类进行绑定。3.头文件的操作的结束了,之后来到对应的.cpp文件内。以上就是所有的步骤,在setupUi(this)的后面即可进行一些自己的操作来控制ui中所创建的一些控件。选择需要的控件类型,比如QStackedWidget类型。最后在构造函数里初始化ui界面 使用以下这段代码来进行初始化操作。

m0_68925706的博客 5145

【Qt】使用Qt designer(Qt设计师)以及uic工具将ui文件转换到C++代码进行界面开发

它是Python GUI开发的一个重要工具,可以帮助用户快速创建具有丰富功能的用户界面。uic是Qt的用户界面文件(.ui)到C++代码(.h/.cpp)的转换工具。它可以将使用Qt Designer创建的UI文件转换成可在C++代码中使用的类。使用uic工具可以方便地将Qt Designer中设计的UI文件转换成可在C++代码中使用的类,这样可以大大简化UI开发的过程。使用uic工具,你可以将UI文件转换成C++类,然后在你的应用程序中使用这些类来创建、显示和管理用户界面。得到一个后缀为ui的文件。

weixin_56017984的博客 4178

QT添加使用图片与UI资源

QT制作UI,添加外部资源的必要流程

飞浪纪元FE的博客 3376
上一篇: QtCreator的中如何使用第三方依赖库
下一篇: 在Qt中如何使用QtDesigner创建的UI文件(二)
e5Max
博客等级 码龄14年 145粉丝 129原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值