当前位置: 首页 > news >正文

Qt ui在程序中的使用

哈尔滨理工大学软件工程专业08-7李万鹏原创作品,转载请标明出处

http://blog.csdn.net/woshixingaaa/archive/2010/08/09/5798356.aspx

首先介绍ui的文件,Qt 通过Qt designer 可以生成ui文件,ui文件以XML的方式记录了designer生成界面的相关内容(大体内容包括widget的属性,其内容的相关属性,头文件,变量,槽,函数)。在使用designer创建的form(也就是ui文件)最后在qmake的时候转换成c++代码。qmake能够检测到窗体文件(*.ui件), 通过uic(user interface compiler)可以把ui文件内容翻译成标准的.h,.cpp文件,并存放在ui_xxx.h文件中。该文件给出了Dialog对应类的完整定义,类名为Ui_Dialog,并包含一个setupUi()成员函数,用于初使化form。在该头文件的最后,使用一个Ui命名空间将该Ui_Dialog类包含进来,并派生出名为Dialog的子类,而Ui::Dialog就成为Designer设计的界面对外的接口了。

利用Designer设计生成ui的3种使用方式

1.直接使用法

2.单继承法

3.多继承法

一.看一个直接使用的例子:

QWidget * w = new QWidget; Ui::Small s; s.setupUi(w); w.show();

二.现在来讨论单继承法:

本实例使用 Designer 生成3个简单的ui,在使用时,两个ui插入到主程序的QTabWidget中,另一个ui由按钮触发弹出,如图所示

先通过Designer 实现三个ui

//widget.h #ifndef WIDGET_H #define WIDGET_H #include <QTabWidget> #include <QWidget> #include <QtGui> #include "ui_first.h" //包含3个ui的头文件 #include "ui_second.h" #include "ui_third.h" class MyWidget:public QWidget{ Q_OBJECT public: MyWidget(); ~MyWidget(); private: QTabWidget *tab; Ui::First firstUi; //在MyWidget类中声明了3个私有的窗体对象, Ui::Second secondUi; // 我们在代码中会通过该对象操作窗体元素 Ui::Third thirdUi; private slots: void slotChild(); }; #endif //widget.cpp #include "widget.h" MyWidget::MyWidget(){ tab = new QTabWidget(this); QWidget *w1 = new QWidget; //首先新建QWidget对象,以此QWidget对象为参数 firstUi.setupUi(w1); //调用第一个ui的setupUi(),生成第一个ui界面 QWidget *w2 = new QWidget; secondUi.setupUi(w2); tab->addTab(w1,"First"); tab->addTab(w2,"Second"); tab->resize(300,300); connect(firstUi.childPushButton,SIGNAL(clicked()),this,SLOT(slotChild())); connect(secondUi.closePushButton,SIGNAL(clicked()),this,SLOT(close())); } MyWidget::~MyWidget(){ } void MyWidget::slotChild(){ QDialog *w3 = new QDialog; thirdUi.setupUi(w3); w3->exec(); }

注意:在使用ui页面上的控件时,一定要记得加上ui前缀。

//main.cpp #include <QApplication> #include "widget.h" int main(int argc, char *argv[]){ QApplication app(argc,argv); MyWidget s; s.show(); return app.exec(); }

同样这个实例采用多继承则要复杂的多,针对每个页面都要实现一个类,此处以第三个ui对话框为例,

以多继承的方式实现它。

#include "ui_third.h" class ThirdDialog: public QDialog, private Ui::Third{ ThirdDialog(); ...... } ThirdDialog:ThirdDialog(){ setupUi(this); }

由于ThirdDialog是Ui::Third的子类,因此可直接在构造函数中调用setupUi()函数实现第三个对话框的显示。

void MyWidget::slotChild(){ ThirdDialog *dlg = new ThirdDialog; dlg->show(); }

从以上 对 两种继承方式的分析可见,多继承方式可以直接对ui页面上的控件或函数进行操作调用,代码编写更

加简介;而使用单继承方式,在操作ui页面上的控件时需要加上ui对象前缀,编写代码较为麻烦,但对于程序

中所需用到的ui页面较多时,使用单继承法则要简单灵活的多。

相关文章:

  • grub2编译安装
  • 项目中用到的架构模式(持续更新)
  • 校园招聘笔试题(A卷)
  • javadoc 命令
  • 校园招聘笔试题(B卷)
  • 进程与线程的一个简单解释
  • 嵌入式C开发人员的最好的0x10道笔试题
  • nullnullDefining and Launching the Query 定义和启动查询
  • IT知名公司工资一览
  • C++ const的用法
  • sourceforge开源项目
  • Winform 常用技巧
  • Keil 仿真之外设控制(System Viewer)
  • Qt 实现多文档
  • 局部特征(4)——SIFT和SURF的比较
  • python3.6+scrapy+mysql 爬虫实战
  • 「面试题」如何实现一个圣杯布局?
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • CODING 缺陷管理功能正式开始公测
  • GraphQL学习过程应该是这样的
  • Koa2 之文件上传下载
  • Otto开发初探——微服务依赖管理新利器
  • Shadow DOM 内部构造及如何构建独立组件
  • SOFAMosn配置模型
  • v-if和v-for连用出现的问题
  • Webpack 4x 之路 ( 四 )
  • 复杂数据处理
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 利用DataURL技术在网页上显示图片
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 微服务入门【系列视频课程】
  • 微信小程序设置上一页数据
  • 《码出高效》学习笔记与书中错误记录
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • MPAndroidChart 教程:Y轴 YAxis
  • ​flutter 代码混淆
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #162 (Div. 2)
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (多级缓存)多级缓存
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (五)c52学习之旅-静态数码管
  • (一)Thymeleaf用法——Thymeleaf简介
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .dwp和.webpart的区别
  • .Net mvc总结
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET连接数据库方式
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @WebService和@WebMethod注解的用法
  • [ C++ ] STL_list 使用及其模拟实现
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯