QUiLoader 类可让独立应用程序在运行时使用UI 文件中存储的信息,进而可以分离UI设计工作。
一、使用Qt 设计师-Qt Designer创建ui文件
打开Qt Designer,选择"创建"
往中央区域拖住几个控件,进行布局,更改三个控件的objectName(写程序时会用到)
更改按钮的样式,右击按键,选择"更改样式表"
选择更改背景
随便选择一个
点击"OK"
按钮的样式给更改
Ctr+S 保存,更改文件名为"MyUI.ui",选择一个保存位置
二、编写程序读取ui文件
创建一个Qt项目
更改.h代码如下:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class QLineEdit;
class QPushButton;
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void onDebugPushButton();
private:
Ui::MainWindow *ui;
QLineEdit *m_nameLineEdit;
QLineEdit *m_ageLineEdit;
QPushButton *m_debugPushButton;
};
#endif // MAINWINDOW_H
更改.cpp代码如下:
#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QUiLoader>
#include <QFile>
#include <QDebug>
#include <QBoxLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QDir>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QUiLoader loader;
QFile file("E:/1.SWS/0.Demo/MyUiLoader/MyUI.ui");
if(!file.open(QFile::ReadOnly))
{
qDebug() << file.errorString();
return;
}
//从UI文件中加载信息
QWidget *myWidget = loader.load(&file, this);
file.close();
//使用qFindChild函数通过objectName查找需要的控件
m_nameLineEdit = myWidget->findChild<QLineEdit*>("nameLineEdit");
m_ageLineEdit = myWidget->findChild<QLineEdit*>("ageLineEdit");
m_debugPushButton = myWidget->findChild<QPushButton*>("debugPushButton");
connect(m_debugPushButton, &QPushButton::clicked, this, &MainWindow::onDebugPushButton);
//显示到界面上
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(myWidget);
this->centralWidget()->setLayout(layout);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::onDebugPushButton()
{
qDebug() << m_nameLineEdit->text();
qDebug() << m_ageLineEdit->text();
}
运行程序,界面如下,五个控件被加载进来了,而且按钮的样式还在,这样能达到界面设计与代码逻辑相分离的目的
在输入框中输入一些内容,点击"输出"按钮,输出框中打印出如下信息