当前位置:首页 > CN2资讯 > 正文内容

uiautomation文档 windows10

3天前CN2资讯


作者:王姗姗,华清远见嵌入式学院讲师。

这两天跟着班级辅导,总有学生感到很疑惑,用ui designer设计出来的ui文件是如何使用的,下面我从一个例子来说明下,希望能对有这样疑惑的同学有帮助。

事实上,现在有了继承设计工具qtcreator,作为开发者再也不用考虑这个问题,因为当你用qtcreator创建一个工程的时候,qtcreator提供的框架已经替我们完成了这个任务。

咱们先从这个程序开始看:

新建一个工程,

在这个工程中用ui designer来设计了这样的一个界面

这是我按ctrl+alt+r运行出来的,如何使这个利用ui designer设计出来的ui文件能运行起来就是我们这篇文章要议论的内容。

先来看看qtcreator提供的默认框架是如何实现的。要研究qtcreator怎么实现,就得先看dialog.h这个文件。

#ifndef DIALOG_H #define DIALOG_H#include <QDialog> namespace Ui { class Dialog; }class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = 0); ~Dialog();protected: void changeEvent(QEvent *e);private: Ui::Dialog *ui;private slots: void on_pushButton_clicked(); };#endif // DIALOG_H

观察不难得出,在上文中我用红色包含的就是实现这个程序的关键。它声明一个类,将设计出来的ui界面作为该类的一个子对象,在其构造函数中,先完成对子对象的构造,再使用子对象ui调用其setupUi(this)函数实现ui的现实。

Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); }

看完上面的代码,我们来分析下到底为什么要这样来使用ui文件。

在没有qtcreator之前,给了我们一个ui文件,该如何调用?

针对于ui文件,不知道大家知不知道uic这个工具,这是qt继承的一个工具,它可以利用ui生产.h文件。

uic dialog.ui –o tt.h

就生产了下面的文件:

/******************************************************************************** ** Form generated from reading UI file 'dialog.ui' ** ** Created: Sun May 9 17:29:42 2010 ** by: Qt User Interface Compiler version 4.6.2 ** ** WARNING! All changes made in this file will be lost when recompiling UI file! ********************************************************************************/#ifndef TT_H #define TT_H#include <QtCore/QVariant> #include <QtGui/QAction> #include <QtGui/QApplication> #include <QtGui/QButtonGroup> #include <QtGui/QDialog> #include <QtGui/QHeaderView> #include <QtGui/QLabel> #include <QtGui/QPushButton>QT_BEGIN_NAMESPACE class Ui_Dialog { public: QLabel *label; QPushButton *pushButton; void setupUi(QDialog *Dialog) { if (Dialog->objectName().isEmpty()) Dialog->setObjectName(QString::fromUtf8("Dialog")); Dialog->resize(115, 148); label = new QLabel(Dialog); label->setObjectName(QString::fromUtf8("label")); label->setGeometry(QRect(10, 30, 91, 21)); QFont font; font.setPointSize(12); font.setBold(true); font.setWeight(75); label->setFont(font); pushButton = new QPushButton(Dialog); pushButton->setObjectName(QString::fromUtf8("pushButton")); pushButton->setGeometry(QRect(20, 80, 75, 23)); retranslateUi(Dialog); QMetaObject::connectSlotsByName(Dialog); } // setupUi void retranslateUi(QDialog *Dialog) { Dialog->setWindowTitle(QApplication::translate("Dialog", "Dialog", 0, QApplication::UnicodeUTF8)); label->setText(QApplication::translate("Dialog", "hello,wang", 0, QApplication::UnicodeUTF8)); pushButton->setText(QApplication::translate("Dialog", "close", 0, QApplication::UnicodeUTF8)); } // retranslateUi}; namespace Ui { class Dialog: public Ui_Dialog {}; } // namespace UiQT_END_NAMESPACE #endif // TT_H

通过观察我们会发现uic自动将我们设计的ui文件,生成了一个类,在此例中为class Ui_Dialog。事实上也是这样,uic会自动会利用设计好的ui生成一个包含类Ui_**的ui_**.h文件。那么在此例中,就会将我们设计好的dialog就会被uic文件解析,生成一个叫做ui_dialog.h的文件,此文件中包含Ui_Dialog的类。

那么总结出来,要让ui design设计出来的界面显示出来,只要能设法调用Ui_Dialog类的setupUi函数就行了。

一种简单的方法,直接使用,重新写一个这样的main函数。

#include <QtGui/QApplication> #include <QDialog>#include "ui_dialog.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); Ui::Dialog ui; QDialog *d=new QDialog; ui. setupUi(d); d->show(); return a.exec(); }

第二种方法相对比较简单一点,就是将Ui::Dialog ui或Ui::Dialog *ui写成一个新定义类的一个数据成员,也就是qtcreator提供的那种方法。

#include <QDialog> #include "ui_dialog.h"class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = 0); ~Dialog();protected: void changeEvent(QEvent *e);private: Ui::Dialog *ui;private slots: void on_pushButton_clicked(); };

这样使用的时候需要注意的是在初始化的时候要先完成子对象的初始化,在其构造函数中重写构造函数。

Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); }

第三种方法是以Ui_Dialog类为基类,派生一个新类,在该类的初始化函数中调用setupUi。

#ifndef DIALOG_H #define DIALOG_H#include <QDialog> #include "ui_dialog.h"class Dialog : public QDialog ,public Ui::Dialog { Q_OBJECT public: Dialog(QWidget *parent = 0); };

实现如下:

#endif // DIALOG_H #include "dialog.h" #include "ui_dialog.h"Dialog::Dialog(QWidget *parent) : QDialog(parent), Ui::Dialog() { setupUi(this); }

希望通过讲解,大家能总结出该如何使用ui文件。无非就是利用默认工具uic自动产生的类,去调用该类的setui函数。第一种是直接使用,第二种是定义一个新类,声明一个ui子对象,第三种是将ui作为基类派生新的类。

如果您喜欢这篇文章,可以加华清远见老师为好友,单击以下链接即可:


 

(作者:华清远见嵌入式培训中心  

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/26873.html

    分享给朋友:

    “uiautomation文档 windows10” 的相关文章

    Amazon Lightsail Free Tier 全面解析:如何免费体验并最大化利用 AWS 入门服务

    Amazon Lightsail 的免费层(Free Tier)为新用户提供了一个绝佳的机会,可以在不产生额外费用的情况下体验其服务。这个免费试用期不仅让用户能够熟悉 Lightsail 的功能,还能为后续的使用打下基础。下面我们将从免费试用时长、资源限制、套餐内容以及超出免费套餐的计费方式等方面,...

    选择合适的云服务器配置:1c1g与1c2g的优缺点分析

    云服务器的配置选项相当多,其中1c1g和1c2g经常被提及。这两种配置分别代表1个CPU核心和不同的内存容量。1c1g代表1GB内存,而1c2g则有2GB内存。从我个人的经验来看,这两种配置在实际使用中各有其独特的优势。 1c1g配置详解 1c1g的配置相对基础,1个CPU核心加上1GB内存,特别适...

    VPS搭建:从选择提供商到后续管理的全面指南

    什么是VPS搭建? 了解VPS搭建的第一步是弄清楚VPS的定义。VPS,全称为虚拟专用服务器,是将一个物理服务器划分成多个独立的虚拟服务器。每个VPS都具有自己的操作系统和资源,能够像独立服务器一样运行各种应用程序。这种方式提供了更高的灵活性和可控性,相比共享主机来说,用户能够自主安装软件,配置环境...

    Ubuntu 多人远程办公的安装与配置指南

    安装和配置远程桌面软件 在远程办公和团队协作日益成为常态的今天,合理配置远程桌面软件显得尤为重要。在Ubuntu的环境下,安装和配置xrdp和vncviewer等工具,可以让多个用户方便地进行远程访问,提高工作效率。下面,我将一步步带你进行相关的软件安装和配置。 1. 安装xrdp 首先,我们要安装...

    选择合适的虚拟主机 GPU:性能测试与价格平衡

    目前,虚拟主机 GPU 正在迅速成为云计算和数据处理领域的重要组成部分。这种技术的核心概念是利用云计算平台的资源,把图形处理单元(GPU)虚拟化,从而允许多个用户共享同一物理 GPU。这种资源共享的方式,可以大大提升计算效率,同时降低成本。 定义上来说,虚拟主机 GPU 代表了一种通过云平台提供的虚...

    选择合适的国外服务器提升网站性能与安全性

    在今天的数字时代,国外服务器已经成为许多人对网络需求的一种解决方案。简单来说,国外服务器就是指位于其他国家的服务器,通常是为了更好地服务于全球用户。我第一次了解到国外服务器时,是因为一次国际项目的需要。当时项目要求在海外进行数据处理和存储,这让我对国外服务器的定义有了更深刻的认识。 使用国外服务器的...