首页 > 其他分享 >Qt中的ui文件

Qt中的ui文件

时间:2024-04-01 20:55:05浏览次数:21  
标签:文件 Widget Qt Ui UI ui

Qt中的ui文件

简介

Qt中的UI文件是一种特殊的XML格式文件,用于描述应用程序的用户界面。这些文件可以使用Qt的可视化设计工具Qt Designer来创建和编辑。Qt Designer提供了直观的界面,允许用户通过拖放和配置界面元素来设计应用程序的图形用户界面(GUI)。

UI文件包含了界面上各种控件的信息,如按钮、文本框、下拉菜单等,以及它们的布局和属性设置。这些信息以XML格式存储,可以在Qt应用程序中通过Qt User Interface Compiler(uic)工具转换为C++代码,供应用程序使用。

在Qt应用程序中,UI文件通常与C++代码配合使用。开发者可以使用Qt Creator集成开发环境来创建和管理UI文件,并在C++代码中引用和操作这些文件。通过UI文件,开发者可以更加高效地设计和构建图形用户界面,提高应用程序的用户体验。

使用ui文件

默认的代码如下

//头文件
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

//源文件
#include "widget.h"
#include "ui_widget.h"

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

Widget::~Widget()
{
    delete ui;
}
//ui文件
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Widget</class>
 <widget class="QWidget" name="Widget">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Widget</string>
  </property>
  <widget class="QPushButton" name="pushButton">
   <property name="geometry">
    <rect>
     <x>370</x>
     <y>240</y>
     <width>75</width>
     <height>23</height>
    </rect>
   </property>
   <property name="text">
    <string>PushButton</string>
   </property>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

  1. 代码中首先声明了ui中的类,我们看着它的名字也是Widget,但其实它和现在的Widget类是不同的类
namespace Ui {
	class Widget;
}
  1. 声明了ui指针指向ui中的类
private:
	Ui::Widget *ui;
  1. 包含由uic编译的ui_widget.h头文件,这个过程通常自动完成
#include "ui_widget.h"
  1. 在源文件中进行构造, 这里是使用了列表初始化相对于在构造函数中ui = new Ui::Widget;
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
  1. 在构造函数中使用setupUi使得this指针指向的窗口成为承载ui中描述的布局和空间的对象
	ui->setupUi(this);

到这里已经知道了如何显示ui的步骤

探秘ui文件内部

手动编译ui文件 使用 uic ./widget.ui -o ui_widget.h

/********************************************************************************
** Form generated from reading UI file 'widget.ui'
**
** Created by: Qt User Interface Compiler version 6.4.3
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_WIDGET_H
#define UI_WIDGET_H

#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_Widget
{
public:
    QPushButton *pushButton;

    void setupUi(QWidget *Widget)
    {
        if (Widget->objectName().isEmpty())
            Widget->setObjectName("Widget");
        Widget->resize(800, 600);
        pushButton = new QPushButton(Widget);
        pushButton->setObjectName("pushButton");
        pushButton->setGeometry(QRect(370, 240, 75, 23));

        retranslateUi(Widget);

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

    void retranslateUi(QWidget *Widget)
    {
        Widget->setWindowTitle(QCoreApplication::translate("Widget", "Widget", nullptr));
        pushButton->setText(QCoreApplication::translate("Widget", "PushButton", nullptr));
    } // retranslateUi

};

namespace Ui {
    class Widget: public Ui_Widget {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_WIDGET_H

  1. 前几行的说明意思是让我们不要改动这个文件,它会在ui改变时候自动重新生成

  2. setupUi 是 Qt 框架中自动生成的一个函数,通常出现在由 Qt Designer 创建的 UI 文件(.ui 文件)转换而来的 C++ 代码中。这个函数的主要作用是初始化用户界面(UI)。

    当你使用 Qt Designer 设计一个图形用户界面并保存为 .ui 文件后,Qt 的 uic 工具会将这个 .ui 文件转换为一个 C++ 类,这个类包含了一个 setupUi 方法。这个方法负责根据 .ui 文件中的设计,创建和配置界面上的所有控件(如按钮、文本框、列表等),并设置它们的属性(如位置、大小、字体等)。

    此外,setupUi 还会自动处理信号和槽的连接。在 Qt 中,信号和槽是一种用于对象间通信的机制。一个对象的信号可以在某种事件发生时被触发,而槽则是对这个信号的响应。setupUi 会根据 .ui 文件中的设置,自动将控件的信号连接到相应的槽函数上,从而实现了界面上的交互功能。

    在类的构造函数中,通常会调用 setupUi 方法来初始化界面。

  3. retranslateUi是一个Qt特有的方法,用于将UI控件中的文本从默认语言翻译为当前用户系统语言。这个方法通常在应用程序启动时调用,以确保所有UI控件的文本都是用用户的本地语言显示的。在Qt应用程序中,所有的文本字符串都应该定义在一个.ts文件中。这个文件包含所有需要翻译的字符串及其对应的翻译。然后,使用Qt的linguist工具可以将.ts文件翻译成目标语言的.qm文件。应用程序启动时,Qt将加载与用户系统语言相对应的.qm文件,并根据翻译文件中的内容更新UI控件中的文本。retranslateUi方法的作用是将当前窗口(`Wid

标签:文件,Widget,Qt,Ui,UI,ui
From: https://www.cnblogs.com/caixuf/p/18109347

相关文章

  • 【Azure Function & Application Insights】调用Function上传和下载文件,有时候遇见大
    问题描述在FunctionApp中配置了无代码模式的ApplicationInsights,但有时候发现,超过1MB的文件上传/下载操作成功。但是在ApplicationInsights中,却没有发现请求日志?这是一种什么情况呢? 问题解答ApplicationInsights 是具有采样功能的,当传入执行的速率超过指定的阈值时,Appl......
  • Qt 实现的万能采集库( 屏幕/相机/扬声器/麦克风采集)
    【写在前面】        之前应公司需要,给公司写过一整套直播的库(推拉流,编解码),类似于libobs。    结果后来因为没有相关项目,便停止开发&维护了。    不过里面很多有用的组件,然后也挺好用的,遂开源出来一部分。    因此,本篇就简单讲一下用......
  • 动态去读 dll 文件
    //反射动态读取dll//Assemblyassembly=Assembly.LoadFile();路径//Assemblyassembly=Assembly.LoadFrom();//全名称//Assemblyassembly=Assembly.Load();//dll名称不用加上后缀  //反射动态读取dll//Assemblyassembly=Assembly.Lo......
  • pyautogui
    fromtypingimportTupleimportpyperclipimportpyautoguiimportcv2importnumpyasnpclassGui(object):'''pyautogui操作'''@classmethoddeffind_img_position_yn(cls,file_path:str)->(int,i......
  • 云原生最佳实践系列 7:基于 OSS Object FC 实现非结构化文件实时处理
    方案概述现在绝大多数客户都有很多非结构化的数据存在OSS中,以图片,视频,音频居多。举一个图片处理的场景,现在各种终端种类繁多,不同的终端对图片的格式、分辨率要求也不同,所以一张图片往往会有很多张衍生图,那如果所有的衍生图都存在OSS中,那存储的成本会增加,所以就可以通过OSSO......
  • 使用Element-UI的form表单验证文件是否上传
    项目中有个需求,表单中的文件为必传项。 其中使用了element-ui的form表单验证,话不多说,上代码。<template><div><el-formlabel-position="top":model="reportForm"ref="checkerForm":rules="rules"label-......
  • QtQuick 学习笔记(一)容器组件
    1.QGroupBox功能提供分组框支持,可在其中布置多种窗口部件常用函数与组件voidsetChecked(boolchecked)QGroupBox使能voidsetTitle(constQString&title)标题文本设置效果及功能测试GroupBox.cpp#include<QApplication>#include<QDialog>#include......
  • 如何在Node.js中使用Express直接上传客户端文件到MinIO?
    如何在Node.js中使用Express直接上传客户端文件到MinIO?在Node.js中使用MinIO的前提是已经安装并进行了相关设置。在此基础上,需要引入MinIO的SDK,通过它实现客户端文件上传。以下代码示例演示了如何通过Express 直接从客户端上传文件到MinIO:constexpress=requir......
  • C语言中常用的文件操作
    本文将介绍常用的关于文件操作函数,如fopen,fclose,fread,fwrite,feek,ftell,rewind以及feof和ferror等文件操作操作函数,还介绍一些用于所有输入输出流的函数如fgetc,fputc,fgets,fputs,fprintf,fscanf等函数,还介绍了sscanf,sprintf函数,feof和ferror函数。最后介绍了文件文件缓......
  • src文件夹别名配置-Vue
    修改vite.config.js文件import{defineConfig}from'vite'importvuefrom'@vitejs/plugin-vue'//@ts-ignoreimportpathfrom'path'//https://vitejs.dev/config/exportdefaultdefineConfig({plugins:[vue()],resolve:{......