Qt/C++使用QUiLoader动态加载ui资源文件

这篇具有很好参考价值的文章主要介绍了Qt/C++使用QUiLoader动态加载ui资源文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


动态对话框

动态对话框(dynamic dialog)就是在程序运行时使用的从Qt设计师的.ui文件创建而来的那些对话框。动态对话框不需要通过uic把 .ui文件转换成C++代码,相反,它是在程序运行的时候使.用QUiLoader 类载人该文件的。

使用场景

动态对话框使不重新编译应用程序而可以改变窗体布局的做法成为可能。动态对话框也同样可用于创建小型终端应用程序,这些程序只有一个内置的前端窗体,并且只是在需要的时候才会去创建所有的其他窗体。还可以使得界面设计和逻辑的相互分离,前后端同时开发。效率更高。

注意事项

该功能在Qt4中就引入了,如果你是在Qt5或者更高版本还需要配置Qt5UiTools.lib库。我的路径为xx\Qt\5.15.2\msvc2019_64\lib\Qt5UiToolsd.lib。关于加载静态库这里不再赘述,直接贴出代码,如果你也是用qt create开发那么你只需要修改路径就可以使用了。

LIBS += -LD:/Qt/5.15.2/msvc2019_64/lib/ -lQt5UiTools

动态对话框加载

加载需要用到QUiLoader这个类,通过load方法将文件加载进去。通过获取返回值来判断是否加载成功,然后就可以做出对应的处理。

#include <QtUiTools/QUiLoader>
	QUiLoader uiloader;
    QFile file("./testDialog.ui");
    QWidget* testDialog = uiloader.load(&file);
    if(testDialog != nullptr)
    {
        testDialog->show();
    }

获取动态对话框的控件对象

可以使用QObject::findChild\<T>()来访问这个窗体中的各个控件。

说明:findChild\<T>()函数是一个模板成员函数,它可以返回与给定的名字和类型相匹配的子对象。

    QPushButton* btn = testDialog->findChild<QPushButton*>("pushButton");
    if(btn != nullptr)
    {
        qDebug() << btn->text();
        btn->setEnabled(false);
    }

与动态对话框建立关联

还可以使用connect关联动态对话框的控件。在使用上与正常的ui文件没有任何区别。

下面这段会让我点击该按钮,让"林夕07"这个按钮解除禁用。

    btn2 = testDialog->findChild<QPushButton*>("pushButton_2");
    if(btn2 != nullptr)
    {
        connect(btn2, &QPushButton::clicked, this, [&](){ btn->setEnabled(true);});
    }

左边是点击"我改变了"的按钮前,右侧是点击后,可以看到"林夕07"按钮已解除禁用状态了。
qt动态加载ui文件,Qt,c++,qt,ui,QUiLoader

动态修改ui资源文件效果测试

下面的DynamicDialog.exe是测试程序,testDialog.ui是我们需要动态加载的ui文件。
qt动态加载ui文件,Qt,c++,qt,ui,QUiLoader
点击DynamicDialog.exe测试效果
qt动态加载ui文件,Qt,c++,qt,ui,QUiLoader

然后我将testDialog.ui的内容进行修改再次测试。
qt动态加载ui文件,Qt,c++,qt,ui,QUiLoader
可以看到我们原本的控件位置都移动了,甚至我们还添加了新的控件。文章来源地址https://www.toymoban.com/news/detail-831485.html

到了这里,关于Qt/C++使用QUiLoader动态加载ui资源文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【翻译】Qt Designer 如何使用资源文件

    原文地址:https://doc.qt.io/qt-6/designer-resources.html Qt的资源浏览器是用于管理应用程序资源的工具,可以让开发者方便地查看和管理应用程序中的各种资源文件,例如图像、字体、布局文件、对话框等。 资源浏览器提供了一个可视化的界面,可以让开发者轻松地浏览和管理应用

    2024年01月19日
    浏览(40)
  • Qt - .ui 文件的使用

    子目录只能输入英文,想要显示中文,可以修改右下方表中的 text 属性: 让工具栏共用 菜单栏的 new 和 open,只需将下方列表的控件,拖拽到工具栏。 添加分隔符 allowedAreas 设置允许停靠的位置。 可以通过 MainWindow.cpp 的 ui 属性,找到所有的控件。 添加 icon 资源 会创建 .qr

    2024年02月16日
    浏览(43)
  • 【Qt】如何在Qt应用程序中使用设计好的UI文件

    本质上,Qt Designer的ui文件是一个以XML格式书写的文件,文件中内容描述了一个界面的widget关系树。这个文件在以下两种情况下会使用到: (1)在编译的时候,这意味着ui文件将被转换为可编译的c++代码,这个过程由 uic 完成。 (2)在应用程序运行的时候,ui文件将由 QUiLoa

    2024年01月16日
    浏览(48)
  • qt中使用 ui 文件进行界面设计

    目录 1、创建 Qt 应用 ​2、项目创建成功 3、直接点击打开 mainwindow.ui 文件 4、随便从左边侧边栏拖拽一个空间到 界面设计区域 5、在右侧边栏右键点击 pushButton 控件,点击转到槽 6、根据实际需要选择对应的信号,我这里方便演示选择 clicked()信号,直接点击 OK 7、自动在

    2024年02月04日
    浏览(42)
  • qt打开项目缺少ui_文件,使用手动生成

    打开项目看到,缺少ui_myMainWindow.h文件,它是和myMainWindow.ui相对应的,所以我们需要手动生成对应的ui_文件。 步骤如下: 使用 uic.exe 来生成,如果在系统变量Path中设置了qt的bin目录,那么就可以直接使用uic.exe。 使用方法是: 在myMainWindow.ui所在文件夹的空白处点击右键,选择

    2024年02月11日
    浏览(45)
  • Qt 中动态加载窗口(C++)

    在编程中,我经常会遇见要根据用户触发按钮,动态生成窗口的情况。在此有两种方法可以动态生成窗口:一:直接在槽函数中调用窗口类。二:将 **.ui 添加到资源文件,通过 QUiLoader 加载。 现将两种方法介绍如下。 在 Qt 中创建 Qt 设计师界面类 一: 1)在函数中实例化窗体

    2024年02月11日
    浏览(40)
  • QT 链接动态库 (静态链接 条件编译 动态加载)

    本篇文章以我实际使用过程为例,在此总结一下qt链接动态库的几种方式 使用的动态库为libzint.so,库目录为/usr/local/lib 第一种为直接将库添加到QT中,可以看成静态库 通过pro文件添加链接 在用到外部库的程序代码中直接 这样就可以直接调用外部库的中结构体与函数接口 可以

    2024年01月20日
    浏览(49)
  • 【Qt】使用Qt designer(Qt设计师)以及uic工具将ui文件转换到C++代码进行界面开发

    【Qt】编写第一个Qt程序,使用Cmake编译并运行 Qt Designer是一个用于创建Qt应用程序用户界面的图形化界面设计器。它是Python GUI开发的一个重要工具,可以帮助用户快速创建具有丰富功能的用户界面。 打开终端输入以下代码 点击创建 拖一些组件进来,点击保存 得到一个后缀为

    2024年02月16日
    浏览(54)
  • QT Designer 生成的ui文件转化成py文件以及简单使用

    首先用QTdesigner 设计你的界面 然后保存成.ui文件 这一步大家应该都可以做到,就不细讲了 然后就是转换步骤 使用cmd进入ui所在目录 或者在pycharm项目里的终端进入ui所在目录 然后输入下列语句 这里的outputUI就可以替换成你想要的输出文件名 InputUI就是你想要转换的ui文件名 稍

    2023年04月08日
    浏览(51)
  • C/C++笔记-使用Qt的UI文件时make流程

    首先创建如下项目: QtWidgetMakfileDemo.pro Widget.h main.cpp Widget.cpp ui是空的。 此时运行命令qmake,然后再make,打印如下: 整体逻辑是这样的: ①将ui文件生成对应的C++的.h文件; ②将.cpp编译成.o文件; ③将带有Q_OBJECT和继承了QObject的类生成对应的moc_xxx.cpp文件; ④编译moc文件,

    2024年02月05日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包