【Qt】如何在Qt应用程序中使用设计好的UI文件

这篇具有很好参考价值的文章主要介绍了【Qt】如何在Qt应用程序中使用设计好的UI文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、导读

本质上,Qt Designer的ui文件是一个以XML格式书写的文件,文件中内容描述了一个界面的widget关系树。这个文件在以下两种情况下会使用到:

  • (1)在编译的时候,这意味着ui文件将被转换为可编译的c++代码,这个过程由uic完成。
  • (2)在应用程序运行的时候,ui文件将由QUiLoader类处理,该类用于解析XML文件并动态构造widget树。

本文描述第一种情况:在编译的时候使用ui文件。描述ui文件背后的机制,以及如何在应用程序中使用设计好的ui文件。

二、编译过程中对ui文件的处理

​ 在实际项目开发中,使用Qt Designer创建用户界面组件(当然也完全可以使用代码描述),并使用Qt的集成构建工具qmakeuic在构建应用程序时为生成代码,这个过程是集成开发环境完成的。生成的代码包含了ui文件中描述的用户界面对象,它是一个c++结构体,包含以下几个内容:

  • (1)指向窗体小部件、布局、布局项、按钮组和操作的指针。
  • (2)名为setupUi()的成员函数,用于在父部件上构建部件树。
  • (3)名为retranslateUi()的成员函数,用于处理ui文件字符串属性的转换。

生成的代码可以在应用程序中包含,并可以直接使用。除此之外,还可以用于扩展标准小部件的子类。

了解了QtCreator对ui文件背后的处理机制,下文将来看看如何在编译构建过程中使用ui文件。

三、在编译过程中如何使用ui文件

主要有三种方法在编译过程中使用ui文件:1、直接附加、2、单继承方式、3、多继承方式。

1、直接附加:构造一个小部件作为组件的占位符,并在其中设置用户界面。

2、单继承方式:子类化Qt标准界面元素的基类(例如QWidget或QDialog),并包括ui用户界面对象的私有实例。

3、多继承方式:将ui文件的基类和表单的用户接口对象都子类化。这允许从子类的范围内直接使用ui文件中定义的小部件。

(3-1)直接附加方式

此处,创建一个名为widget.ui的ui文件:

qt在.ui使用,小生聊【Qt】,qt,ui,QtCreator,C++

为了使用直接附加的方法使用ui文件,直接在main.cpp中包含ui_widget.h文件:

#include "ui_widget.h"

然后在主函数中构造一个标准的QWidget,用于创建widget小部件,我们则使用这个QWidget来托管由widget描述的用户界面ui文件,完整代码如下:

#include "ui_widget.h"

int main(int argc,char *argv[])
{
   QApplication app(argc,argv);

   QWidget *w = new QWidget;
   Ui::Widget ui;
   ui.setupUi(w);

   w->show();

   return app.exec();
}

直接附加方法是一种在应用程序中快速使用组件的简单方法。但是在实际开发中,使用Qt Designer创建的组件通常需要与应用程序的其余代码进行紧密的集成。例如,上面提供的widget代码将编译并运行,但是界面中的对象之间不会进行交互。为了实现这一点,则需要使用单继承方法。

(3-2)单继承方式

使用单继承方式,需要子类化一个标准的Qt小部件,并在其中包括ui用户界面对象的私有实例。可以采取以下两种方式的任意一种:

(1)成员变量方式

(2)指向成员变量的指针

成员变量方式

在这种方法中,子类化了一个Qt小部件,并从构造函数中setupUi()用户界面。以这种方式使用的组件将ui文件中使用的小部件和布局公开给Qt小部件子类,并提供一个标准系统,用于在用户界面和应用程序中的其他对象之间建立信号和槽函数连接。

为了确保可以正常使用用户界面,需要在子类化的Qt小部件描述文件中包含uic生成的头文件,然后引用Ui::Widget(本文是Widget.ui界面文件):

qt在.ui使用,小生聊【Qt】,qt,ui,QtCreator,C++

子类化了一个Qt小部件子类的构造函数通过调用ui对象的setupUi()函数来构造和配置界面中的所有小部件和布局:

qt在.ui使用,小生聊【Qt】,qt,ui,QtCreator,C++

这种方法的优点是:简单使用继承来提供了基于QWidget的接口,并将用户界面小部件变量封装在ui数据成员中。我们可以使用这个方法在同一个小部件中定义多个用户界面,每个界面都包含在自己的名称空间中,并可以覆盖(或组合)它们。

指向成员变量的指针

采用这种方式,对ui用户界面对象的写法上就变成了指向Ui::Widget的指针:

qt在.ui使用,小生聊【Qt】,qt,ui,QtCreator,C++

对应的源文件则是:

qt在.ui使用,小生聊【Qt】,qt,ui,QtCreator,C++

这种方法的优点是:用户界面对象可以预先声明,这意味着不必在头文件中包含生成的ui_Widget.h文件,然后可以在不重新编译相关源文件的情况下更改ui文件。

可见,这两种方法都能使用ui文件,但推荐使用指向成员变量的指针的方式使用ui文件,这也是库和大型应用程序开发的方法,况且使用QtCreator新文件创建向导添加的ui界面类则是以这种方式生成的代码。

(3-3)多继承方式

使用Qt Designer创建的ui文件可以与标准的基于QWidget的类一起子类化。通过这种方法,可以在子类的范围内直接访问ui文件中定义的所有用户界面组件,并能够使用connect()函数建立信号和槽函数连接。

本文创建了Widget.ui界面描述文件,首先则需要在子类中包含使用uic从Widget生成的头文件:

#include "ui_widget.h"

接着在这个类的定义中需继承QWidget和Ui::Widget,可以私有的继承Ui::Widget,以确保用户界面对象在子类中是私有的。当然还可以将其与public或protected关键字一起继承,就像在前面的例子中可以让ui为public或protected一样。如下所示:

qt在.ui使用,小生聊【Qt】,qt,ui,QtCreator,C++

对应的源码文件则是:

qt在.ui使用,小生聊【Qt】,qt,ui,QtCreator,C++

在多继承方式中,用户界面中使用的小部件的访问方式与手工在代码中创建的小部件的一样。除此之外,我们不再需要ui前缀来访问这些小部件了。

四、总结

以上三种在进行应用程序编译时使用ui文件的方法,其目的都是以如何在应用程序设计和编写中使用UI文件中所描述的Widget为目的展开的。直接附加方法较为简单,在开发几乎不使用。单继承方式较为常用,其次是多继承方式。文章来源地址https://www.toymoban.com/news/detail-792202.html

到了这里,关于【Qt】如何在Qt应用程序中使用设计好的UI文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 「Qt中文教程指南」如何创建基于Qt Widget的应用程序(四)

    Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 本文描述了如何使用Qt Creator创建一个小的Qt应用程序

    2024年02月06日
    浏览(58)
  • 06-3_Qt 5.9 C++开发指南_多窗体应用程序的设计(主要的窗体类及其用途;窗体类重要特性设置;多窗口应用程序设计)

    常用的窗体基类是QWidget、QDialog 和QMainWindow,在创建 GUI应用程序时选择窗体基类就是从这 3 个类中选择。QWidget 直接继承于 QObject,是 QDialog 和 QMainWindow 的父类,其他继承于 QWidget 的窗体类还有 QSplashScreen、QMdiSubWindow和QDesktopWidget。另外还有一个类QWindow,它同时从 QObject 和Q

    2024年02月13日
    浏览(86)
  • PyQt应用程序中的多线程:使用Qt还是Python线程?

    多线程模块能够更加高效得完成任务,但是在PyQt 应用程序中实现多线程可以使用 Qt 的线程模块(QThread)或者 Python 的 threading 模块。两者各有优劣,具体选择取决于项目需求和个人偏好。下面我们将以案例来说明两种模块具体得优缺点。 1、问题背景 在 PyQt 应用程序中,编

    2024年02月22日
    浏览(54)
  • 使用linuxdeploy-x86_64.AppImage打包QT应用程序的步骤

    使用AppImage打包名为irSync的QT应用程序的重新生成步骤 应用程序名为myApp  icon名为:logo.png 1.创建一个名为PacketAppDir的文件夹。 2.准备myApp.desktop文件,文件内容为: [Desktop Entry] Version=1.0 Type=Application Name=myApp Exec=myApp Icon=logo Categories=Utility; 3.准备脚本文件AppRun,内容如下 #!/bin/

    2024年02月08日
    浏览(53)
  • C#程序设计——Windows应用程序开发,1、初步掌握Windows应用程序的设计方法。2、掌握常用窗体控件的使用方法。

    初步掌握Windows应用程序的设计方法。 掌握常用窗体控件的使用方法。 1、设计一个Windows应用程序,创建一个用于添加学生个人基本信息的窗体,窗体下方法同时滚动信息“天行健,君子以自强不息!”。   要示如下: 如图1所示,设计窗体界面控件的布局 图1 学生信息管理

    2024年02月10日
    浏览(85)
  • 如何使用 Python 创建 Twitter 应用程序

    简介 通过访问 Twitter API,您可以管理社交媒体账户,并且可以从社交媒体中获取数据。如果您代表一个企业或组织,这对品牌推广很有帮助;对于个人用户和业余程序员来说,这也可以是一种有趣的娱乐方式。 在本文中,我们将概述创建 Twitter 应用程序所需的步骤。 然后,

    2024年02月20日
    浏览(61)
  • 如何使用代码混淆技术保护移动应用程序安全

    在移动应用开发过程中,代码保护一直是一个重要的议题。为了保护应用程序免受黑客攻击和逆向工程师的破解,开发人员使用各种方法来加强应用程序的安全性。其中,代码混淆是一种常用的技术,可以通过对代码进行混淆、压缩和重命名等操作,使得应用程序的代码难以

    2024年01月17日
    浏览(69)
  • 如何使用Vue.js构建桌面应用程序

    Vue.js是一个流行的JavaScript框架,可以用于构建Web应用程序。但是,Vue.js也可以用于构建桌面应用程序。本文将介绍如何使用Vue.js构建桌面应用程序,包括以下步骤: 1. 选择一个Vue.js框架:选择一个适合你的Vue.js框架。我们推荐使用Electron,因为它是最流行的桌面应用程序框架

    2024年02月15日
    浏览(51)
  • 如何在Android设备上检查应用程序使用情况,包括使用时间

    你可能不知道自己花了多少时间在手机上。很可能你一天中有一半的时间都在盯着手机屏幕。如果你怀疑这一事实,你会很快核实的。在这篇文章中,我们将向你介绍如何在Android设备上检查应用程序的使用情况。 你使用时间最长的应用程序可能会消耗最多的电池。然而,有

    2024年02月07日
    浏览(56)
  • 如何使用CORS和CSP保护前端应用程序安全

    前端应用在提供无缝用户体验方面起着核心作用。在当今互联网的环境中,第三方集成和API的普及使得确保强大的安全性至关重要。安全漏洞可能导致数据盗窃、未经授权访问以及品牌声誉受损。本文将向您展示如何使用CORS和CSP为您的网页增加安全性。 嗨,大家好!️欢迎

    2024年02月03日
    浏览(53)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包