QUiLoader加载ui文件

本文介绍如何使用QUiLoader类动态加载Qt Designer创建的用户界面。通过实例演示了如何在运行时创建并显示额外的窗口,实现界面间的通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QUiLoader使独立的应用程序在运行时动态地创建用户界面,使用存储在UI文件或插件路径中指定的信息。
此外,可以自定义或派生自己的类加载器创建自己的用户界面。也就是说:用于动态的加载设计师生成的界面(QMainWindow、QWidget、QDialog)。
QUiLoader类允许创建基于存储在UI文件中的信息或指定插件路径的(使用Qt Designer创建的)小部件。指定插件路径可以使用pluginPaths()函数来检索。同样,一个UI文件的内容可以使用load()函数来检索。
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(showWidget()));
void MainWindow::showWidget()
{
if (!pWidget)
{
QUiLoader loader;
QFile file(“D:\Works\GAEA-PUBLIC\GGM\branches\UiLoader\Test.ui”);
file.open(QFile::ReadOnly);
pWidget = loader.load(&file);
if (pWidget)
{
QPushButton *pPushButton = pWidget->findChild(“pushButton”);
if (pPushButton)
connect(pPushButton, SIGNAL(clicked()), this, SLOT(changeText()));
}
file.close();
}
if (pWidget)
pWidget->showNormal();
}
void MainWindow::changeText()
{
static int i = 0;
QStringList strList;
strList << “red” << “green” << “blue” << “yellow” << “gray”;
ui->pushButton->setStyleSheet(QString(“color:white; background:%1”).arg(strList.at(i%5)));
ui->pushButton->setText(QString(“Hello World…%1”).arg(i++));
}
此处包含两个界面,MainWindow以及索要加载的Test.ui界面(此处可为QMainWindow、QWidget、QDialog),当点击MainWindow中的按钮时触发槽showWidget,槽中使用QUiLoader对Test.ui进行加载,并获取其中的按钮,和主界面进行互相“通信”。。。

pro中需要添加依赖的模块:
QT += core gui widgets uitools

包含头文件:
#include

效果如下:
QUiLoader加载ui文件

QUiLoader加载ui文件

注:
技术在于交流、沟通,转载请注明出处并保持作品的完整性。
作者:╰☆奋斗ing❤孩子` 原文:http://blog.sina.com.cn/s/blog_a6fb6cc90102uw3w.html

QUI 框架的组件库包含近百种组件,并且为每一种组件都制作了大量的典型示例,充分展示组件的各种应用场景,完全能够满足企业前端应用的各种需要。 她是所有前端框架中组件库最全的框架之一。并且提供非常详尽的使用文档,目前包含642个章节,涉及框架使用中可能会遇到的方方面面。 QUI 框架是目前所有同类产品中最漂亮的前端框架,拥有上百套美观的、风格各异的皮肤模板供选择, 还包含十几种不同的导航架构,为用户提供整体的前端系统解决方案。这是其他任何框架所不具备的,其他框架仅仅是组件库而已。 使用QUI 框架开发的系统,具有非常好的用户体验,极大的提高您的产品质量, 同时也更加能体现您公司的技术实力。 QUI 框架的组件库采用标签机制来构建组件,将开发人员从繁琐的JS编码中解脱出来,很大程度减少前台编码的出错率;保留HTML的布局方式,从而快速进行页面布局;对开发者前台技术要求也非常低,只需要了解html语法和一些简单的JS即可,从而把更多精力放在业务功能的实现上,极大地提高开发效率。 QUI 从第一版推出到现在历经近5年时间,目前已拥有超过100家企业级客户和众多的个人开发者客户。 积累了大量的用户需求经验,并根据客户的需求和反馈不断完善产品,目前的V3版系列是第三代产品,是非常完美的版本,完全能够满足开发公司和个人的使用需要。 QUI 框架提供源码,用户可以根据自己需要进行修改,调整或者学习,切实保障客户的利益;用户可以永久免费更新升级,QUI 持续提供更新后的源码;用户会获得我们的技术支持,在使用中遇到问题可以找我们协助解决;如果发现bug,可以提交问题,QUI 框架将会持续进行更新来修复bug和增加新的特性。
### 如何在 PySide6 中加载 `.ui` 文件 #### 方法一:通过 `pyside6-uic` 工具将 `.ui` 文件转换为 Python 代码 PySide6 提供了一个名为 `pyside6-uic` 的工具,该工具可以将 `.ui` 文件(XML 格式)转换为等效的 Python 代码。这样可以直接在项目中导入生成的 Python 模块并使用其界面定义。 以下是具体操作流程: 1. 使用命令行运行以下命令来生成对应的 Python 文件: ```bash pyside6-uic your_file.ui -o ui_your_file.py ``` 2. 在主程序中导入生成的模块,并实例化窗口类: ```python from PyQt5.QtWidgets import QApplication, QMainWindow from ui_your_file import Ui_MainWindow # 导入生成的模块中的 UI 类 class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_MainWindow() # 创建 UI 实例 self.ui.setupUi(self) # 设置 UI 到当前窗口 if __name__ == "__main__": import sys app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec()) ``` 这种方法的优点在于生成的 Python 文件可以在 IDE 中直接编辑和调试[^1]。 --- #### 方法二:动态加载 `.ui` 文件而不进行预编译 如果不想提前将 `.ui` 文件转换为 Python 代码,也可以在运行时动态加载 `.ui` 文件。这可以通过 `QUiLoader` 和 `QFile` 来实现。 以下是完整的代码示例: ```python from PySide6.QtCore import QFile, QIODevice from PySide6.QtUiTools import QUiLoader from PySide6.QtWidgets import QApplication, QMainWindow class DynamicUILoader: def load_ui(self, file_path): loader = QUiLoader() ui_file = QFile(file_path) if not ui_file.open(QIODevice.ReadOnly): raise FileNotFoundError(f"Cannot open {file_path}") widget = loader.load(ui_file) ui_file.close() return widget if __name__ == "__main__": import sys app = QApplication(sys.argv) loader = DynamicUILoader() main_window = loader.load_ui("your_file.ui") # 替换为实际的 .ui 文件路径 if isinstance(main_window, QMainWindow): # 如果是 QMainWindow 子类,则设置菜单栏等功能 main_window.showMaximized() else: main_window.show() sys.exit(app.exec()) ``` 此方法适合于需要频繁修改 `.ui` 文件而无需重新编译的情况[^2]。 --- #### 方法三:使用资源文件嵌入 `.ui` 文件 对于更复杂的场景,可以考虑将 `.ui` 文件作为资源文件嵌入到应用程序中。这种方式通常配合 Qt 的资源系统 (`qrc`) 使用。 1. 首先创建一个资源文件 (`.qrc`) 并添加 `.ui` 文件: ```xml <RCC> <qresource prefix="/"> <file>resources/your_file.ui</file> </qresource> </RCC> ``` 2. 将资源文件编译为 Python 模块: ```bash pyside6-rcc resources.qrc -o resources_rc.py ``` 3. 修改上述动态加载代码以支持从资源文件读取 `.ui` 数据: ```python from PySide6.QtCore import QFile, QTextStream, QIODevice from PySide6.QtUiTools import QUiLoader from PySide6.QtWidgets import QApplication class ResourceUILoader: def load_ui_from_resource(self, resource_name): loader = QUiLoader() ui_file = QFile(resource_name) if not ui_file.exists(): raise FileNotFoundError(f"Resource '{resource_name}' does not exist.") if not ui_file.open(QIODevice.ReadOnly): raise IOError(f"Failed to open resource '{resource_name}'") data_stream = QTextStream(ui_file) widget = loader.load(ui_file) ui_file.close() return widget if __name__ == "__main__": import sys app = QApplication(sys.argv) loader = ResourceUILoader() main_window = loader.load_ui_from_resource(":/resources/your_file.ui") main_window.show() sys.exit(app.exec()) ``` 这种技术特别适用于打包后的应用,其中外部文件可能不可用[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值