要点
MainWindow->resize(800, 600);
pushButton->setGeometry(QRect(100, 100, 200, 50));
这个就是最终生成的代码设置宽高用到的接口
内容
在 Qt Creator 中,当你在设计器中为一个控件设置宽高时,这些设置实际上被存储在生成的 UI 文件(通常是一个 XML 格式的文件)中。这些设置会在应用程序运行时,通过 setupUi()
方法传递给控件。
传递过程
- UI 文件生成:
- 当你在设计器中拖放控件并设置其属性(如宽、高等)时,Qt Creator 会自动生成或更新一个对应的 UI 文件(例如
mainwindow.ui
)。 - 这个 UI 文件以 XML 格式描述了所有控件及其属性。
- 当你在设计器中拖放控件并设置其属性(如宽、高等)时,Qt Creator 会自动生成或更新一个对应的 UI 文件(例如
- UI 类生成:
- Qt 的
uic
(User Interface Compiler)工具会将这个 XML 文件编译成一个 C++ 类(例如ui_mainwindow.h
),这个类包含了所有控件的声明以及它们的初始化逻辑。
- Qt 的
setupUi()
方法:- 在你的主窗口或其他顶层窗口中,Qt Creator 会生成一个
Ui
类的实例(例如Ui::MainWindow
),并提供一个setupUi()
方法。 setupUi()
方法会读取 UI 文件中存储的属性,并将这些属性应用到相应的控件上。
- 在你的主窗口或其他顶层窗口中,Qt Creator 会生成一个
具体实现
以下是一个简化的过程,展示了这些设置是如何在运行时被应用到控件的:
-
UI 文件(例如
mainwindow.ui
):<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>MainWindow</class> <widget class="QMainWindow" name="MainWindow"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>800</width> <height>600</height> </rect> </property> <widget class="QWidget" name="centralwidget"> <widget class="QPushButton" name="pushButton"> <property name="geometry"> <rect> <x>100</x> <y>100</y> <width>200</width> <height>50</height> </rect> </property> <property name="text"> <string>Push Button</string> </property> </widget> </widget> </widget> </ui>
-
生成的 C++ 代码(例如
ui_mainwindow.h
):class Ui_MainWindow { public: void setupUi(QMainWindow *MainWindow) { if (MainWindow->objectName().isEmpty()) MainWindow->setObjectName(QStringLiteral("MainWindow")); MainWindow->resize(800, 600); centralwidget = new QWidget(MainWindow); centralwidget->setObjectName(QStringLiteral("centralwidget")); pushButton = new QPushButton(centralwidget); pushButton->setObjectName(QStringLiteral("pushButton")); pushButton->setGeometry(QRect(100, 100, 200, 50)); pushButton->setText(QStringLiteral("Push Button")); MainWindow->setCentralWidget(centralwidget); } private: QWidget *centralwidget; QPushButton *pushButton; };
-
在你的代码中使用:
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); }
说明
resize()
和setGeometry()
:在setupUi()
方法中,resize()
用于设置窗口的大小,而setGeometry()
用于设置控件在其父窗口中的位置和大小。- 属性应用:所有在设计器中设置的属性(如宽、高、文本等)都会在
setupUi()
方法中被应用到相应的控件上。
通过这种方式,Qt Creator 确保了在设计器中设置的属性能够在运行时被正确传递给控件。