Qt编程中,Ui文件如何被利用...

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

这两天跟着班级辅导,总有学生感到很疑惑,用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 Ui

QT_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作为基类派生新的类。

PyQt5 Ui可视化编程 python python Ui可视化编程 可视化编辑生成python UI界面,基于PyQt5。 生成窗口界面。可编译为。exe文件 一、 安装环境,基于已经安装好的python环境 安装pyQt5 pip install pyqt5 pip install pyqt5-tools 二、 Pycharm相关配置:添加Qt Designer工具 简介:Qt Designer用于可视化生成ui窗口界面代码,生成文件为xxx.ui 打开settings->Tools->External Tools点击 阅读详情

相关推荐

Qt实现YModem文件传输协议上位机完整指南

本文还有配套的精品资源,点击获取 简介:在信息技术领域,文件传输协议YModem至今仍然在特定环境下具有应用价值。本文详细介绍了如何利用Qt框架来开发一个符合YModem协议的上位机程序。文章内容包括Qt串口通信的配置和使用,YModem协议帧格式的解析,文件操作,多线程编程,错误处理机制,用户界面设计以及事件驱动编程等关键技术点。本项目旨在帮助开发者掌握基于Qt的YMod...

weixin_28681379的博客 2155

如何使用ui文件

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

华清远见 | 程序员的学习天堂 1033

Qt框架和Windows系统DNS修改器的开发教程

Qt框架由Trolltech公司开发,后被Nokia收购,现在是Digia公司的产品。它使用Qt Widgets模块可以快速开发传统的桌面应用程序界面。Qt Quick模块则使得开发现代的触摸屏和动态用户界面变得非常简单。Windows API是Microsoft Windows操作系统提供给软件开发人员的一组函数、宏、数据类型和结构,它们封装了操作系统内部的复杂功能,使得开发人员能够编写出功能强大且符合Windows风格的应用程序。

weixin_35752645的博客 687

Qt中C++代码搭配UI文件实现交互界面

像使用Qt类一样随意使用ui,超乎想象一般的丝滑

liangyunshan123的博客 9169

Qt - .ui 文件的使用

目录 工具栏 Dock Widget 代码控制 ui 添加资源 添加文件

AI工程化、开源分享、文档翻译、代码笔记 1123

[编程语言][C++][Qt]单独添加UI文件

Qt中单独添加UI文件

火云的专栏 2215

Qt C++手动创建.ui文件并且与类进行绑定

前言:有的时候做一些新的窗口时,创建完.cpp和.h后发现没有.ui文件,有些控件纯代码实现就比较费时间,而且微调很麻烦。以下时近一段时间总结的手动给类创建.ui文件并且与所创建的类进行绑定。3.文件的操作的结束了,之后来到对应的.cpp文件内。以上就是所有的步骤,在setupUi(this)的后面即可进行一些自己的操作来控制ui中所创建的一些控件。选择需要的控件类型,比如QStackedWidget类型。最后在构造函数里初始化ui界面 使用以下这段代码来进行初始化操作。

m0_68925706的博客 5140

Qt编程中,Ui文件如何被利用

这两天跟着班级辅导,总有学生感到很疑惑,用ui designer设计出来的ui文件是如何使用的,下面我从一个例子来说明下,希望能对有这样疑惑的同学有帮助。 事实上,现在有了继承设计工具qtcreator,作为开发者再也不用考虑这个问题,因为当你用qtcreator创建一个工程的时候,qtcreator提供的框架已经替我们完成了这个任务。 咱们先从这个程序开始看: 新建一个工程,

高调做事,低调做人 438

Qt编程中,Ui文件如何被利用(转)

 这两天跟着班级辅导,总有学生感到很疑惑,用ui designer设计出来的ui文件是如何使用的,下面我从一个例子来说明下,希望能对有这样疑惑的同学有帮助。 事实上,现在有了继承设计工具qtcreator,作为开发者再也不用考虑这个问题,因为当你用qtcreator创建一个工程的时候,qtcreator提供的框架已经替我们完成了这个任务。 咱们先从这个程序开始看: 新建一个工程,  

luyafei_89430的专栏 2020

pyQT5 学习使用 笔记 五 opencv+QtQt UI中显示 opencv 图像。

前文中我们 了解到了 python 中 如何 使用 Qt 的 重要的 信号 与 槽的传递 和执行机制。这也是Qt的一个最重要的机制。了解了这个机制,那么我们可以做很多事情了, 其实 通过前面的种种学习我们也离目的越来越近。 我的目的就是 通过 python 实现 opencv+Qt 联合编程。 原先用c++也是可以的,但是现在发现 远远没有 python 来的方便,快捷。闲话不多说,下面我们来看如何实现 opencv+Qt 在python中的联合编程的。 ...

youandme520的专栏 3090

Qt使用TCP传输文件(带UI)示例代码

Qt使用TCP传输文件(带UI)示例代码 去发现同类优质开源项目:https://gitcode.com/ 介绍 本项目是一个使用Qt框架实现的基础TCP文件传输应用程序,集成了图形用户界面(UI)。本示例仅供学习交流之用,展示了如何利用Qt进行网络编程,通过TCP协议实现文件的发送与接收。 特点 基于Qt框架,界面友好,易于操作。 实现了TCP客户端和服务器之间的文件传输。 简单直观的UI设计...

gitblog_06718的博客 264

Qt Gui编程中两种创建窗体界面方法

一、手动编写界面代码 Qt编程中所使用的语言是面向对象的C++,在初学GUI编程时,如果仅仅依靠Qt Designer编辑器来通过拖拽一些widget来设计界面,则会很容易迷惑我们,并且很难弄懂其中所涉及的面向对象思想,也不容易弄懂Qt GUI的一个整体结构。所以在初学Qt GUI时可以通过手动编写界面代码来理解Qt 的GUI结构。 1、组合widget方法 顾名思义,组合widget方

芳草源的博客 2万+

QT信号和槽,以及设计器的使用,还有怎样用ui文件

.如何使用c++方式编写qt的代码 1.类的实例就是一个带有组件的父窗口 自己的类就要 继承QWidget 或者 子类 QDialog QMainWindow 2.窗口中的组件 都要做为自定义类的成员变量 3.类的头文件 和 实现文件 要分离实现 4.如果类中有自定义的信号 和槽函数 则需要在头文件中 出现一个宏 Q_OBJECT 二.信号和...

weixin_30918415的博客 129

QT【小结】2 - UI的使用

1,构造一个类来封装UI。继承GDialog,重写构造函数QWidget,ui.setupUi(this);2,UI参数Q_OBJECT - moc参数3,参数传入-返回检测-返回accept(),reject();

ct的专栏 999

QT 基础知识一览

1.信号和槽机制 它是Qt编程的基础,槽和普通C++成员函数几乎一样,只是它可以和信号相连接。 connect(sender,SIGNAL(signal),receiver,SLOT(slot)); sender和receiver是指向QObject的指针,signal,slot为函数名(不带参数名称)。 2.UI控件开发 qmake工具非常智能,它可以自动检测到用户界面文件并可以生成适

机器学习与神经网络 1373

Qt for Python做一个虚拟示波器软件

Qt for Python做一个虚拟示波器软件摘要1. Qt1.1 Qt Creator 5.0.2 Community1.2 创建Qt工程1.3 UI设计1.4 ui文件转py文件 摘要 示波器是一种用来将电信号转化为可视化图形的智能仪器,在物理学中尤为常见。20世纪70年代以来,微电子技术和微信计算机技术的快速发展,使电子仪器的整体水平发生了很大变化。自微处理器问世后,先后出现了独立式智能仪器及自动测试系统、个人仪器系统。随着个人计算机算力的不断增强,虚拟化成为电子仪器的一个发展方向。本文用社区版qt

cumtLeibnizDavid的博客 5913

QT+SFtp工具开发实战:SFTP客户端设计与实现

Qt是一个跨平台的C++图形用户界面应用程序开发框架,由挪威TrollTech公司开发。它提供了一套丰富的库和工具,用于开发具有复杂用户界面的桌面、嵌入式和移动应用程序。Qt框架采用了模块化设计,使得开发者能够根据项目的需要,有选择性地使用其提供的功能。Qt的设计思想强调代码的可重用性和可维护性,这使得它在需要长期支持和维护的应用程序开发中非常受欢迎。

weixin_29859471的博客 1150
上一篇: QT vs2010 win7 64 环境编译
下一篇: QT信号与槽之槽函数
hzsjun
博客等级 码龄14年 15粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值