Qt界面UI文件的使用与界面继承问题

目录

一、UI文件

二、uic.exe生成ui_xxx.h

三、例子

1、界面

2、ui文件

3、ui_qmywidget.h

4、qmywidget.h

5、qmywidget.cpp

三、界面继承问题

1、基类

2、派生类


一、UI文件

        .ui通常是指Qt设计师设计出来的界面文件的后缀,它本质上是一个标准XML格式的文本文件,需要通过uic工具将其转换为项目中可用的ui_xxx.h头文件。使用时ui是一个指向这个界面类的指针,u i − >一般就是用来访问这个界面类里面的控件。
 

二、uic.exe生成ui_xxx.h

            QT的UI如何加入到程序中来?xxx.ui文件是一个xml文件,描述了ui属性,包括ui路径,名称,尺寸等信息,这个文件可由ui设计工具qt designer生成;但是要想在程序中使用ui,需要通过uic.exe和xxx.ui生成一个ui_xxx.h文件。cmd中cd到xxx.ui所在的路径,输入 uic.exe xxx.ui -o ui_xxx.h。

三、例子

1、界面

 

 

2、ui文件

        qmywidget.ui

3、ui_qmywidget.h

/********************************************************************************
** Form generated from reading UI file 'qmywidget.ui'
**
** Created: Thu Jul 21 22:07:19 2022
**      by: Qt User Interface Compiler version 4.8.4
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_QMYWIDGET_H
#define UI_QMYWIDGET_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QHeaderView>
#include <QtGui/QPushButton>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_QMyWidget
{
public:
    QPushButton *pushButton;

    void setupUi(QWidget *QMyWidget)
    {
        if (QMyWidget->objectName().isEmpty())
            QMyWidget->setObjectName(QString::fromUtf8("QMyWidget"));
        QMyWidget->resize(400, 300);
        pushButton = new QPushButton(QMyWidget);
        pushButton->setObjectName(QString::fromUtf8("pushButton"));
        pushButton->setGeometry(QRect(130, 120, 91, 61));

        retranslateUi(QMyWidget);

        QMetaObject::connectSlotsByName(QMyWidget);
    } // setupUi

    void retranslateUi(QWidget *QMyWidget)
    {
        QMyWidget->setWindowTitle(QApplication::translate("QMyWidget", "QMyWidget", 0, QApplication::UnicodeUTF8));
        pushButton->setText(QApplication::translate("QMyWidget", "PushButton", 0, QApplication::UnicodeUTF8));
    } // retranslateUi

};

namespace Ui {
    class QMyWidget: public Ui_QMyWidget {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_QMYWIDGET_H

4、qmywidget.h

#ifndef QMYWIDGET_H
#define QMYWIDGET_H

#include <QWidget>
#include "ui_qmywidget.h"

class QMyWidget : public QWidget
{
	Q_OBJECT

public:
	QMyWidget(QWidget *parent = 0);
	~QMyWidget();

private:
	Ui::QMyWidget ui;
};

#endif // QMYWIDGET_H

5、qmywidget.cpp

#include "qmywidget.h"

QMyWidget::QMyWidget(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
}

QMyWidget::~QMyWidget()
{

}

三、界面继承问题

        可以使用不同的ui文件进行界面代码的继承,然后将ui.setupUI(this)写到一个虚函数中去。

1、基类

#ifndef QMYWIDGET_H
#define QMYWIDGET_H

#include <QWidget>
#include "ui_qmywidget.h"

class QMyWidget : public QWidget
{
	Q_OBJECT

public:
	QMyWidget(QWidget *parent = 0);
	~QMyWidget();

    virtual void initUI();

private:
	Ui::QMyWidget ui;
};

#endif // QMYWIDGET_H
#include "qmywidget.h"

QMyWidget::QMyWidget(QWidget *parent)
	: QWidget(parent)
{
	
}

QMyWidget::~QMyWidget()
{

}

void QMyWidget::initUI()
{
ui.setupUi(this);
}
QMyWidget *pWidget=new QMyWidget();
pWidget->InitUI();

2、派生类

#ifndef QMYWIDGET_H
#define QMYWIDGET_H

#include <QWidget>
#include "ui_qmyderivedwidget.h"

class QMyDerivedWidget : public QMyWidget
{
	Q_OBJECT

public:
	QMyDerivedWidget (QWidget *parent = 0);
	~QMyDerivedWidget ();

    virtual void initUI();

private:
	Ui::QMyDerivedWidget ui;
};

#endif // QMYWIDGET_H
#include "qmywidget.h"

QMyDerivedWidget::QMyDerivedWidget(QWidget *parent)
	: QMyWidget(parent)
{
	
}

QMyDerivedWidget::~QMyWidget()
{

}

void QMyDerivedWidget::initUI()
{
    ui.setupUi(this);
}
QMyWidget *pWidget=new QMyDerivedWidget();
pWidget->InitUI();

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
用c++/qt写的项目,可供自己学习,项目都经测试过,真实可靠,请放心使用Qt支持 Windows、Linux/Unix、Mac OS X、Android、BlackBerry、QNX等多种平台,并为这些不同的平台提供了统一的开发环境。 面向对象 C++是完全面向对象的,这一点和Objective-c等在开发很相似。而Qt又是基于C++一种语言的扩展,大家都知道C++ 有快速、简易、面向对象等很多优点,所以Qt自然也继承者C++这些的优点。 Qt良好的封装机制使得Qt的模块化程度非常高,可重用性较好,对用户开发来货是非常方便的。Qt提供一种为signals/slots(信号和槽) 的安全型来替代callback,使得各个元件之间的协同工作变得十分简单。 丰富的API Qt包括多达 250 个以上的 C++ ,还提供基于模板的 collections, serialization, file, I/Odevice, directory management, date/time 。甚至还包括正则表达式的处理功能。 支持 2D/3D 图形渲染,支持 OpenGL。 大量的开发文档。 XML支持 Webkit 引擎的集成,可以实现本地界面与Web内容的无缝集成, 但是真正使得 Qt 在自由软件界的众多 Widgets (如 Lesstif,Gtk,EZWGL,Xforms,fltk 等等)中脱颖而出的还是基于 Qt 的重量级软件 KDE。 信号和槽机制 Qt提供了信号和槽机制用于完成见面操作的响应,是完成任意两个Qt对象之通信机制。其中,信号会在某个特定情况或动作下被触动,槽是等同于接受并处理信号的函数。 为什么方法不是直接调用的。中间用到 Signal 和槽机制不是多此一举? 其实在我们生活也是一样,老板级别的好说话,老板给助理分派任务也好说话,但是助理给老板分任务,可想而知会有什么后果,在以前的统治阶层肯定不允许这样的事发生。所以在分层思想中,我们所调用的函数也是这样的,上层可以调用下层和同一层的函数,下层函数不可以调用上层函数,否则程序的层次性会被打破,导致结构错综复杂,难以维护和管理。 那么怎样才能做到向上管理呢,有任务分配给老板怎么办? 老板会设立一个机构,也就是一个函数,用无限循环来查询助理的状态,如果助理真的有事情,这个机构就把这消息拿到老板来处理。但是这种处理方式显得有些复杂,我们想要的简单明了的方式是,如果助理有事件发生,可以直接调用老板函数处理。 说了这么多其实就是想说,信号和槽的最大优势在于,它完善了程序分层的思想,可以在不改变程序的层次性的情况下,完成由下层到上层的调用。在下层发出一个 Signal,这时上层与其想关联的 Slot 函数就会响应。
Qt QSS(Qt Style Sheets)是一种界面样式定义文件,用于美化Qt应用程序的界面。它可以轻松地更改应用程序的外观,包括颜色、字体、边框等等。下面是一些关于Qt QSS界面美化文件的要点: 1. 语法:Qt QSS使用似于CSS的语法,可以定义各种UI元素的样式。可以通过选择器、属性和值的组合来选择和修改UI元素。 2. 文件应用:可以将Qt QSS文件应用于整个应用程序、单个窗口或特定的UI控件。通过使用setStyleSheet()方法,可以将QSS文件加载到应用程序中。 3. 样式修改:Qt QSS文件可以修改各种UI元素的样式和外观。例如,可以更改按钮的颜色、边框和文本样式,也可以更改文本框的颜色和字体。 4. 状态修改:Qt QSS文件还可以根据控件的状态来修改其样式。例如,可以根据鼠标悬停、按下或禁用状态来修改按钮的样式。 5. 层叠样式:Qt QSS支持层叠样式,即可以为不同的控件定义不同的样式,并可以通过选择器的层次结构来覆盖或继承样式。 6. 预定义属性:Qt QSS提供了一些预定义属性,用于快速设置UI元素的样式。例如,可以使用"color"属性设置文本颜色,使用"font-family"属性设置字体。 7. 动态样式:可以在运行时动态地修改Qt QSS文件。通过重新加载或修改QSS文件,可以实现在无需重新编译应用程序的情况下更改界面样式。 总的来说,Qt QSS是一种功能强大的界面美化文件,能够轻松地自定义Qt应用程序的外观和样式。通过使用QSS,可以快速而灵活地修改UI元素的样式,增强应用程序的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kupeThinkPoem

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值