在 Qt Creator 中设置的宽高,是如何传递给控件的

要点

MainWindow->resize(800, 600);

pushButton->setGeometry(QRect(100, 100, 200, 50));

这个就是最终生成的代码设置宽高用到的接口

内容

在 Qt Creator 中,当你在设计器中为一个控件设置宽高时,这些设置实际上被存储在生成的 UI 文件(通常是一个 XML 格式的文件)中。这些设置会在应用程序运行时,通过 setupUi() 方法传递给控件。

传递过程

  1. UI 文件生成
    • 当你在设计器中拖放控件并设置其属性(如宽、高等)时,Qt Creator 会自动生成或更新一个对应的 UI 文件(例如 mainwindow.ui)。
    • 这个 UI 文件以 XML 格式描述了所有控件及其属性。
  2. UI 类生成
    • Qt 的 uic(User Interface Compiler)工具会将这个 XML 文件编译成一个 C++ 类(例如 ui_mainwindow.h),这个类包含了所有控件的声明以及它们的初始化逻辑。
  3. setupUi() 方法
    • 在你的主窗口或其他顶层窗口中,Qt Creator 会生成一个 Ui 类的实例(例如 Ui::MainWindow),并提供一个 setupUi() 方法。
    • setupUi() 方法会读取 UI 文件中存储的属性,并将这些属性应用到相应的控件上。

具体实现

以下是一个简化的过程,展示了这些设置是如何在运行时被应用到控件的:

  1. 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>
  2. 生成的 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;
    };
  3. 在你的代码中使用

    #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 确保了在设计器中设置的属性能够在运行时被正确传递给控件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值