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
    评论
Qt中怎么用Ui文件 第一步, 制作ui文件。 首先应该用Qt Designer绘制一个自己的界面,并存为myform.ui(这里的myform可以用自己喜欢的名字代替)。 在制作自己的界面文件时要注意以下几个要点: 1、要记住ui文件的名字,因为uic生成的代码会存在ui_myform.h里 2、要记住主窗体的object name, 因为ui文件提供的名将以这个form的名字来命名 3、要特别注意你的form选择的基要和你代码中的窗体兼容 4、要记得给每个后面需要访问到的控件起一个有意义并且好记的object name, 因为ui文件提供的控件将以这些object name来命名 清楚了以上几点,在代码中使用你的ui文件就会变得非常简单。 第二步,将ui文件加入工程 这一步最简单,只需要修改pro文件,加入FORMS+=myform.ui qmake -project命令也可以识别后缀名为ui文件,并将之加入工程。 第三步,在代码中引用ui文件 官方介绍的使用ui文件的方法有三种,一个是直接引用,二是单继承,三是多继承。 第一种方法其实很不实用,大家去看一下文档中的例子就可以了;第二种和第三种没有本质的差别,可以并作一,这里做重点介绍。 ui文件最终会被翻译成标准的C++代码,并存入一个.h文件中,这个过程在调用make之后才进行,所以初始情况下你是看不到这个ui_myform.h文件的,只有经过了make过程该头文件才生成。不过没关系,没有这个文件我们照样能写出正确的代码。 单继承方式简单来说就是在代码中首先要自定义一个子(后文称为MyForm),该要从form对应的窗体(或其兼容的子)派生;并用ui生成的定义一个里的成员变量(后文成文myui)。这样在MyForm的构造函数中可以直接调用myui和myui中的变量和函数,使用起来很方便。 举例说明, 比如这里有一个ui文件叫myform.uiui文件里定义的窗体名字为BigWidget,上面摆放了一个单行编辑控件叫lineeditName: //myform.h #include “ui_myform.h” class MyForm: public QWidget { Q_OBJECT public: MyForm(QWidget*parent) { myui.setupUi(this); } private: Ui::BigWidget myui; private: void my_function(); }; 上面这段简单的的声明是前文所述前三点要点的最佳例证,请对照要点的文字描述和具体的代码体会其中的含义。这里还有一点比较有意思的地方,就是ui文件提供的被包含在了名为Ui的name space里,这样做的目的是将ui文件的命名空间与用户的代码分离,避免两者出现命名冲突的情况。相应的,我们写代码的时候也要注意在使用ui文件中的时要用“Ui::”的方式进行引用。 再来看cpp文件 //myform.cpp #include #include “myform.h” void my_function(void) { QMessageBox::information(this, “Name”, myui.lineeditName->text()); } 这里随便写了一个函数,为了说明如何在窗体里调用ui文件中定义的控件。这段代码非常简单,就不多作说明了。 有了单继承的基础,学习多继承是小菜一碟。来段代码看一下就明白了。 //myform.h #include “ui_myform.h” class MyForm: public QWidget, public Ui::BigWidget { Q_OBJECT public: MyForm(QWidget*parent) { setupUi(this); } private: void my_function(); }; //myform.cpp #include #include “myform.h” void my_function(void) { QMessageBox::information(this, “Name”, lineeditName->text()); } 是不是不用说明大家也能明白呢?多继承其实就是不仅从form需要的窗体去派生,还要加上ui提供的本身。这样带来的好处是你的窗体继承ui里的所有控件和方法,调用时就可以少写一些字。 单继承和多继承这两种方法没有好坏之分,大家可以根据自己的编程习惯取舍。 第四步,编译、验证在pro文件包含正确FORMS信息的情况下,运行qmake; make就可以编译工程了。 make时如果你认真看一下输出就会发现,make在最开始编译的时候就会自动调用uic去生成需要的代码。经过make之后ui_myform.h文件就生成了,建议大家去看一下这个文件的内容。
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、付费专栏及课程。

余额充值