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>
- 代码中首先声明了ui中的类,我们看着它的名字也是Widget,但其实它和现在的Widget类是不同的类
namespace Ui {
class Widget;
}
- 声明了ui指针指向ui中的类
private:
Ui::Widget *ui;
- 包含由uic编译的ui_widget.h头文件,这个过程通常自动完成
#include "ui_widget.h"
- 在源文件中进行构造, 这里是使用了列表初始化相对于在构造函数中ui = new Ui::Widget;
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
- 在构造函数中使用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
-
前几行的说明意思是让我们不要改动这个文件,它会在ui改变时候自动重新生成
-
setupUi
是 Qt 框架中自动生成的一个函数,通常出现在由 Qt Designer 创建的 UI 文件(.ui
文件)转换而来的 C++ 代码中。这个函数的主要作用是初始化用户界面(UI)。当你使用 Qt Designer 设计一个图形用户界面并保存为
.ui
文件后,Qt 的uic
工具会将这个.ui
文件转换为一个 C++ 类,这个类包含了一个setupUi
方法。这个方法负责根据.ui
文件中的设计,创建和配置界面上的所有控件(如按钮、文本框、列表等),并设置它们的属性(如位置、大小、字体等)。此外,
setupUi
还会自动处理信号和槽的连接。在 Qt 中,信号和槽是一种用于对象间通信的机制。一个对象的信号可以在某种事件发生时被触发,而槽则是对这个信号的响应。setupUi
会根据.ui
文件中的设置,自动将控件的信号连接到相应的槽函数上,从而实现了界面上的交互功能。在类的构造函数中,通常会调用
setupUi
方法来初始化界面。 -
retranslateUi
是一个Qt特有的方法,用于将UI控件中的文本从默认语言翻译为当前用户系统语言。这个方法通常在应用程序启动时调用,以确保所有UI控件的文本都是用用户的本地语言显示的。在Qt应用程序中,所有的文本字符串都应该定义在一个.ts
文件中。这个文件包含所有需要翻译的字符串及其对应的翻译。然后,使用Qt的linguist工具可以将.ts
文件翻译成目标语言的.qm
文件。应用程序启动时,Qt将加载与用户系统语言相对应的.qm
文件,并根据翻译文件中的内容更新UI控件中的文本。retranslateUi
方法的作用是将当前窗口(`Wid