Qt基础——UI文件.h文件说明

2023-10-29

首先,需要使用Qt Designer设计你的UI界面。

Qt号称是跨平台应用程序和UI开发框架,所以其自带的UI设计器(即Qt Designer)功能也非常强大。

除了通常用的如Button,List等组件外面,使用Qt Designer做UI设计的过程中,用的最多的应该是它的Layouts了。

Qt Layout用于对窗口控件的排版,不需增加任何代码实现控件自动对齐,以及随窗口大小自动缩放等效果。对于Layout,这里就不多说了,有时间单独开一篇写吧。

此外,Qt Designer的属性框里,可以对组件的属性进行编辑(但貌似可供设置的属性有限,很多特殊属性还是要在代码里指定,如输入验证等。。),还可以编辑简单的信号和槽。

如图,是一个用来测试的UI界面:

 

UI界面设计好以后,需要生成对应的.h文件,才可以在VS2008引用。怎么生成.h文件呢?很简单,打开命令行,转到ui文件目录下,输入uic -o ui_***.h ***.ui,执行即可在当前目录下生成名为ui_***的.h文件,看图:

需要说明的是,如果是新建工程时程序自动创建的ui文件,则不需要手动生成.h文件,因为程序创建时对ui文件属性做了一些设置,看图:

即,在ui文件属性自定义生成步骤里,为文件指定命令行参数,这样如果ui文件有修改,则程序在每次编译之前都会生执行命令行内容,生成ui文件对应的.h文件。

好吧,开始今天的正题。

先看一下程序自动生成的几个文件。

//main.cpp

#include "myqttest.h"
#include <QtGui/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    myQtTest w;    
    w.show();
    return a.exec();
}

 

只是实例化一个myQtTest对象,然后show。再看下myQtTest里有什么。。

//myQtTest.h

#ifndef MYQTTEST_H
#define MYQTTEST_H

#include <QtGui/QDialog>
#include "ui_myqttest.h"

class myQtTest : public QDialog
{
    Q_OBJECT

public:
    myQtTest(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~myQtTest();

private:
    Ui::myQtTestForm ui;

};

#endif // MYQTTEST_H

//myQtTest.cpp

#include "myqttest.h"
myQtTest::myQtTest(QWidget *parent, Qt::WFlags flags)
    : QDialog(parent, flags)
{
    ui.setupUi(this);
}

  myQtTest::~myQtTest()
  {

  }

 

我们注意到myQtTest.h文件里包含一个文件“ui_myqttest.h”,是我们刚才生成的头文件,也是我们今天要分析的猪脚。。myQtTest定义了一个私有变量Ui::myQtTestForm ui,然后在构造函数中通过 ui.setupUi(this)方法,为ui对象指定宿主。

然后,去ui_myqttest.h里看看吧。。相关说明,看注释吧。

/********************************************************************************
** Form generated from reading UI file 'myqttest.ui'
**
** Created: Sat Jun 23 00:28:50 2012
**      by: Qt User Interface Compiler version 4.7.3
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_MYQTTEST_H
#define UI_MYQTTEST_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QDialogButtonBox>
#include <QtGui/QHBoxLayout>
#include <QtGui/QHeaderView>
#include <QtGui/QLabel>
#include <QtGui/QLineEdit>
#include <QtGui/QTextEdit>
#include <QtGui/QVBoxLayout>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_myQtTestForm
{
public:
    /** 这个Widget在UI设计时是没有的,是Qt为了方便组合其他的组件而且自动创建的。
    Widget的名字是根据最外层的组件来的,这里最外层是一个QVBoxLayout组件,故Widget
    以VerticalLayoutWidget命名*/
    QWidget *verticalLayoutWidget;
    /** 垂直布局,布局内的所有组件都将垂直对齐 */
    QVBoxLayout *verticalLayout;
    /** 水平布局,布局内的所有组件都将水平对齐 */
    QHBoxLayout *horizontalLayout_2;
    /** 文本显示控件 */
    QLabel *label;
    /** 单选文本输入控件 */
    QLineEdit *lineEdit;
    /** 垂直布局 */
    QVBoxLayout *verticalLayout_2;
    /** 单选文本输入控件 */
    QLabel *label_2;
    /** 文件编辑框 */
    QTextEdit *textEdit;
    /** 按钮框 */
    QDialogButtonBox *buttonBox;

    void setupUi(QDialog *myQtTestForm)
    {
        //设置对象名称
        if (myQtTestForm->objectName().isEmpty())
            myQtTestForm->setObjectName(QString::fromUtf8("myQtTestForm"));
        //根据UI设计重置对话框的大小
        myQtTestForm->resize(535, 354);
        //创建myQtTestForm的Child Widget,
        verticalLayoutWidget = new QWidget(myQtTestForm);
        verticalLayoutWidget->setObjectName(QString::fromUtf8("verticalLayoutWidget"));
        verticalLayoutWidget->setGeometry(QRect(20, 20, 491, 311));

        //以下内容为UI设计的简单的代码实现
        verticalLayout = new QVBoxLayout(verticalLayoutWidget);
        verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
        verticalLayout->setContentsMargins(0, 0, 0, 0);
        horizontalLayout_2 = new QHBoxLayout();
        horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
        label = new QLabel(verticalLayoutWidget);
        label->setObjectName(QString::fromUtf8("label"));

        horizontalLayout_2->addWidget(label);

        lineEdit = new QLineEdit(verticalLayoutWidget);
        lineEdit->setObjectName(QString::fromUtf8("lineEdit"));

        horizontalLayout_2->addWidget(lineEdit);


        verticalLayout->addLayout(horizontalLayout_2);

        verticalLayout_2 = new QVBoxLayout();
        verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2"));
        label_2 = new QLabel(verticalLayoutWidget);
        label_2->setObjectName(QString::fromUtf8("label_2"));

        verticalLayout_2->addWidget(label_2);

        textEdit = new QTextEdit(verticalLayoutWidget);
        textEdit->setObjectName(QString::fromUtf8("textEdit"));

        verticalLayout_2->addWidget(textEdit);


        verticalLayout->addLayout(verticalLayout_2);

        buttonBox = new QDialogButtonBox(verticalLayoutWidget);
        buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
        buttonBox->setOrientation(Qt::Horizontal);
        buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);

        verticalLayout->addWidget(buttonBox);

        //显示控件文本,动态语言切换
        retranslateUi(myQtTestForm);
        QObject::connect(buttonBox, SIGNAL(accepted()), myQtTestForm, SLOT(accept()));
        QObject::connect(buttonBox, SIGNAL(rejected()), myQtTestForm, SLOT(reject()));

        QMetaObject::connectSlotsByName(myQtTestForm);
    } // setupUi

    void retranslateUi(QDialog *myQtTestForm)
    {
        myQtTestForm->setWindowTitle(QApplication::translate("myQtTestForm", "Dialog", 0, QApplication::UnicodeUTF8));
        label->setText(QApplication::translate("myQtTestForm", "LineEidt", 0, QApplication::UnicodeUTF8));
        lineEdit->setText(QApplication::translate("myQtTestForm", "\346\265\213\350\257\225lineEidt", 0, QApplication::UnicodeUTF8));
        label_2->setText(QApplication::translate("myQtTestForm", "TextEidt", 0, QApplication::UnicodeUTF8));
        textEdit->setHtml(QApplication::translate("myQtTestForm", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Qt ui\345\244\264\346\226\207\344\273\266\350\247\243\346\236\220</p></body></html>", 0, QApplication::UnicodeUTF8));
    } // retranslateUi

};

//在命名空间UI下定义myQtTestForm,且全部从Ui_myQtTestForm继承。只是为了使用时更加友好
namespace Ui {
    class myQtTestForm: public Ui_myQtTestForm {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MYQTTEST_H

 

相对比较简单,这里需要注意一点就是,ui头文件是在编译ui文件时自动生成的,所以不要试图对.h文件进行修改,那样只会费力不讨好。

另外,Qt在头文件里自动创建了一个child widget,而且这个widget的大小是固定的,即设计时的大小,从而导致使用UI文件的窗口,其子控件们无法随着窗口的放大缩小进行自动缩放。后面会介绍一个办法来解决这个问题。

 

转载于:https://www.cnblogs.com/linmeng/archive/2012/06/23/2558387.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt基础——UI文件.h文件说明 的相关文章

  • Python学习笔记--exe文件打包与UI界面设计

    exe文件打包与UI界面设计 前言 一 基于tkinter实现的UI设计 1 1 库的选择及思路 1 2 定位方法的选用 1 3 Frame控件 1 4 变量设置 1 5 批量设置 1 6 Text文本框 1 7 总体界面设计 1 8 功能
  • Qt——用于表格QTableView的模型

    如果想使用表格来呈现数据 Qt提供了一个方便的部件QTableWidget 但是直接用它实现一些功能可能比较困难 这里将介绍一种强大 灵活的方式来操作表格 一 模型 视图架构 在这个架构中 模型用于存储数据 视图用于呈现数据 除此之外 还有
  • 突破自定义View性能瓶颈

    在Android应用程序中 自定义View是一个非常常见的需求 自定义View可以帮助您创建独特的UI元素 以满足您的应用程序的特定需求 然而 自定义View也可能会导致性能问题 特别是在您的应用程序需要处理大量自定义View的情况下 在本
  • element-ui中$confirm弹出框的确定和取消按钮互换位置

    element ui中 confirm弹出框的确定和取消按钮互换位置 1 定位元素 2 找到元素class 通过flex布局 进行位置更换 3 app vue中 进行全局修改 确认窗 取消确认按钮位置更换 el message box wr
  • Qt信号与槽的链接3种方法详解

    转载自 14条消息 Qt5 9 2 VS2017入门实例 透彻解析 冯爽朗的博客 CSDN博客 vs qt 示例 由于现在书上介绍的大部分都是Qt Creator 并没有介绍Qt VS的教程 虽然说很相似 但是也有很多地方不同 对于初学者特
  • 分享 20 道关于 React 开发相关的面试题及答案

    React 面试可能你会觉得有点吓人 为了帮助您自信并准备好迎接下一次面试 我们列出了 20 个常见的 React 问题和参考答案 希望通过本篇文章的内容 能够帮助你重新温习你的 React 知识 复习重要概念 并为你的下一次面试做好更充分
  • 如何创建项目

    1 MvvmLight框架的引用 引用 头部选项卡的 工具栏 NuGet 包管理器 管理解决方案的NuGet 程序包 搜索 MVVM Light MvvmLight 作者 Laurent Bugnion GalaSoft 勾选项目 Do n
  • 24.qint64转QString 以及获取文件属性

    qint64转QString 1 qint64 size info size 2 qint64 转QString 3 QString size2 tr 1 arg size 获取文件属性 1 include mainwindow h 2 i
  • 极速入门体验Qt5软件开发,从安装到打包,少走弯路,Qt入门指南,串口调试助手开发实战

    文章目录 前言 一 成果先行 二 下载安装 1 安装QT 三 项目开发实战 1 创建新项目 2 UI设计 3 编写widget h头文件 4 编写widget cpp源文件 四 编译运行 五 项目打包 1 编译发布版 2 绿色版打包 3 安
  • element-ui中日期区间组件

    elementui中日期组件使用 最长只能选择3个月 不限制禁用日期 描述 时间组件代码 描述 点击 确定 按钮进行验证 点击 清空 按钮 清空输入框中的数据 时间范围不能超过3个月 并添加快捷选择今天 最近一周 最近一月 最近3个月 以下
  • 关于UI适配的文档

    第一部分 原理 1 根据当前屏幕尺寸与开发预设屏幕尺寸尺寸得出以下参数 1 XRatio 当前屏幕尺寸与开发尺寸的X轴比例 2 YRtaio 当前屏幕尺寸与开发尺寸的Y轴比例 3minRatio XRatio与YRtaio中的较小值 2 之
  • web移动端布局的那些事儿

    原文地址 github com HuJiaoHJ bl web移动端布局范畴很广 其中比较基础的几个话题 移动端适配 1px border 基础布局 本文主要分享这三个话题 一 移动端适配 提起移动端适配 大家想到的肯定是rem flexi
  • (ps2019)Photoshop 2019 最新破解版下载

    Photoshop CC 2019新增功能 下载地址点我 新功能介绍 https helpx adobe com cn photoshop using whats new html 经过改良设计的内容识别填充 借助 Adobe Sensei
  • Jquery ligerui下拉框复选,使下拉框中相应值对勾选中

    othertypeCombox ligerGetComboBoxManager selectValue 1 2 3 4 othertypeCombox ligerGetComboBoxManager bulidContent 必须加上后一行
  • Swift 响应式编程:简化 KVO 观察与 UI 事件处理 | 开源日报 No.110

    ReactiveX RxSwift Stars 23 8k License MIT RxSwift 是 Reactive Extensions 标准的 Swift 特定实现 它提供了 Observable 接口来表达计算的通用抽象 该项目旨
  • UI 易用性测试 以及自动化实现!

    GUI 是指图形用户界面 UI 是指用户界面 对于纯软件系统 这两者没有本质的区别 GUI易用性测试与 UI 易用性测试内容一致 但是如果测试的对象是一个产品 这两者则存在区别 对于产品 UI 则不仅仅包括 GUI 还包括产品硬件部分的测试
  • app测试必掌握的核心测试:UI、功能测试!

    一 UI测试 UI即User Interface 用户界面 的简称 UI 设计则是指对软件的人机交互 操作逻辑 界面美观的整体设计 好的UI设计不仅是让软件变得有个性有品味 还要让软件的操作变得舒适 简单 自由 充分体现软件的定位和特点 手
  • 创意无限,绘图轻松——Sketch for Mac矢量绘图软件全面介绍

    在现代设计领域 矢量绘图软件是设计师们必不可少的工具之一 而在众多矢量绘图软件中 Sketch for Mac凭借其强大的功能和友好的用户界面脱颖而出 成为众多设计师的首选 Sketch for Mac是一款专为Mac用户开发的矢量绘图软件
  • HarmonyOS鸿蒙开发指南:容器组建 tabs开发指导

    目录 创建Tabs 设置Tabs方向 设置样式 显示页签索引 场景示例 创建Tabs 在pages index目录下的hml文件中创建一个Tabs组件 div class container div
  • 一文从0到1手把手教学UI自动化测试之数据驱动!

    在UI的自动化测试中 我们需要把测试使用到的数据分离到文件中 如果单纯的写在我们的测试模块里面 不是一个好的设计 所以不管是什么类型的自动化测试 都是需要把数据分离出来的 当然分离到具体的文件里面 文件的形式其实有很多的 这里主要说明JSO

随机推荐

  • 【atoi函数的介绍以及模拟实现】

    目录 前言 一 atoi函数测试 1 要求 2 测试 二 atoi函数模拟实现 三 补充 前言 位置 atoi函数包含在
  • 天地图服务与开发

    天地图服务与开发 天地图在线地图网址 2021年7月2日 国家地理信息公共服务平台天地图2021版正式启用 传统版地址 https map tianditu gov cn 2020 新版地址 https map tianditu gov c
  • ssh telnet linux中显示中文

    vi etc sysconfig i18n 将内容改为 LANG zh CN GB18030 LANGUAGE zh CN GB18030 zh CN GB2312 zh CN SUPPORTED zh CN GB18030 zh CN z
  • office中excel设置下拉框多选

    我参照了这篇文章 https www php cn topic excel 444717 html 这篇文章整体写得不错 但是有些小瑕疵 问题1 在模块1中保存 这里并没有说清楚 具体是 VBA编辑器中 插入 模块 然后复制以下代码 Pub
  • js if else return不管用_前端知识013 学会异步,JS不再烧脑

    01 同步和异步 0101 认识同步异步 0102 前端经常遇到的异步操作 三个经典例子 0103 拿到异步的结果 轮询和回调 0104 回调的几种方式 02 Promise 0201 Promise基本用法 0202 Promise 基本
  • 【打卡-蓝桥杯】Day 7

    题目1 基础练习 芯片测试 解题思路 因为好的芯片多于坏的 所以如果是好芯片 那个被测试为 1 的 总数 gt n 2 代码 n int input arr list map int input split for in range n f
  • python自动化控制设备有限公司_华为 Python网络自动化

    哈喽 大家好 我是艺博东 是一个思科出身 专注于华为的网工 好了 话不多说 我们直接进入正题 光棍二十年 不知道情人节是什么鬼东西 还是好好学技术吧 努力 奋斗吧 为了早日走向人生巅峰 迎娶白富美 拼了 1 安装环境并导入相关模块 首先是安
  • 错误 0xc0202009: 数据流任务 1: SSIS 错误代码 DTS_E_OLEDBERROR。出现 OLE DB 错误。

    原来是一个varchar字段出出现了 和 等特殊字符 这个在insert语句中没有问题 但是使用导入导出会报错 最后要注意的是 导入导出使用的是BulkInsert 方式 每次可能读取一大段 多行记录一起处理 如果这批数据中有错 那么 程序
  • html5注册阿里巴巴作业,面试分享:2018阿里巴巴前端面试总结(题目+答案)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 使用js实现一个持续的动画效果 最开始的思路是用定时器实现 最后没有想的太完整 面试官给出的答案是用 requestAnimationFrame var e document getElemen
  • Java基础(四)——多态、抽象类、接口、内部类

    一 多态 1 多态性是指同一操作作用于某一类对象 可以有不同的解释 产生不同的执行效果 同一事件发生在不同的对象身上 有不同的效果 2 多态存在的三个必要条件 a 需要存在继承和实现关系 b 同样的方法调用而执行不同操作 运行不同代码 重写
  • JS 中把对象按属性名字母顺序进行排序和倒序

    本文同步发布在 JS 中把对象按属性名字母顺序进行排序和倒序 我们在进行前端开发的时候 有时需要对参数进行签名 签名很多第一步是把对象按属性名字母顺序进行排序 那么在 JS 中如何实现呢 实现方式很多 这边介绍一种通过 ES6 的方式来实现
  • Andy‘s First Dictionary C++ STL set应用

    目录 题目描述 思路分析 代码 题目描述 原文 Andy 8 has a dream he wants to produce his very own dictionary This is not an easy task for him
  • vue实现动态锚点

    div class dialog header item item div 需要点击的目标增加click事件 并且把索引传下去 没有索引也没有关系 想传什么传什么 锚点 getActiveClass index let jump docum
  • 「网页开发|前端开发|Vue」05 Vue实战:从零到一实现一个网站导航栏

    本文主要介绍如何从最开始的草图 通过确定基本结构 修改元素布局 美化外观来实现一个网站导航栏 从而熟悉网页开发的基本流程 同时 我们会把性能 规范性 可维护性方面的代码优化也考虑其中 文章目录 本系列前文传送门 一 场景说明 设计目标 二
  • 几种常用激活函数的简介

    1 sigmod函数 函数公式和图表如下图 在sigmod函数中我们可以看到 其输出是在 0 1 这个开区间内 这点很有意思 可以联想到概率 但是严格意义上讲 不要当成概率 sigmod函数曾经是比较流行的 它可以想象成一个神经元的放电率
  • Python正则表达式学习(3)——re.compile()

    re compile pattern flags 0 将正则表达式 pattern 编译为正则表达式对象 可用于使用其 match 和search 方法进行匹配 顺序 prog re compile pattern result prog
  • Pinctrl子系统之一了解基础概念

    1 Linux Pinctrl子系统简介 在许多soc内部都包含有pin控制器 通过pin控制器的寄存器 我们可以配置一个或者一组引脚的功能和特性 在软件方面 Linux内核提供了pinctrl子系统 目的是为了统一各soc厂商的pin脚管
  • TreeView —WPF—MVVM—HierarchicalDataTemplate

    摘要 采用HierarchicalDataTemplate数据模板和treeview在MVVM模式下实现行政区划树 支持勾选 勾选父节点 子节点回全部自动勾选 子节点部分勾选时 父节点半勾选 子节点全部勾选时 父节点勾选 反之亦然 Hier
  • 吴恩达9.3 反向传播的直观理解

    为了更好地理解反向传播算法 我们再来仔细研究一下前向传播的原理 前向传播算法 反向传播算法做的是
  • Qt基础——UI文件.h文件说明

    首先 需要使用Qt Designer设计你的UI界面 Qt号称是跨平台应用程序和UI开发框架 所以其自带的UI设计器 即Qt Designer 功能也非常强大 除了通常用的如Button List等组件外面 使用Qt Designer做UI