Qt文档阅读笔记|Qt工作笔记-setupUi官方解析与实例(widgets中界面与业务分离)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq78442761/article/details/86645167

目录

前言

官方解析

模拟界面与业务分离过程

博主栗子


前言

在最开始创建Qt项目的时候,已经默认添加好了,现在来分析下,这么做有什么意义!

官方解析

void QWidget::setupUi(QWidget *widget)
为指定的widget设置一个ui界面。
注意:此函数可用于uic创建的widget。

模拟界面与业务分离过程

这里来模拟下如何实现界面与逻辑业务分类!(注意这是最简单的情况

比如新建的一个项目:

这是一个没有带有UI的项目,但他的确是一个widgets!运行截图如下:

这里创建一个UI界面!

下面是关键,估计只有Qt Creator可以看见想象,包含这个目录,注意现在有橘黄色波浪!

过一丢丢时间后:

这也是Creator强大的地方,这里是ui的解析的头文件,具体不再讲解。

按住Ctrl键,点击他,会发现如下:

这里需要使用qmake参与得到moc,最后才能得到.h文件

此时放form.ui上拖一个控件。

widget.cpp用如下的代码:

#include "widget.h"
#include "ui_form.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    Ui::Form fromUi;
    fromUi.setupUi(this);
    this->adjustSize();
}

Widget::~Widget()
{

}

这也就是当创建一个界面类的时候,Qt给用户自动生成的这些东西!

博主栗子

这里我要说明的是ui里面的改变样式表。

比如做了一个好玩的ui界面

样式表内容如下:

background-color: qconicalgradient(cx:0, cy:0, angle:135, stop:0 rgba(255, 255, 0, 69), stop:0.375 rgba(255, 255, 0, 69), stop:0.423533 rgba(251, 255, 0, 145), stop:0.45 rgba(247, 255, 0, 208), stop:0.477581 rgba(255, 244, 71, 130), stop:0.518717 rgba(255, 218, 71, 130), stop:0.55 rgba(255, 255, 0, 255), stop:0.57754 rgba(255, 203, 0, 130), stop:0.625 rgba(255, 255, 0, 69), stop:1 rgba(255, 255, 0, 69));

这里使用刚刚的方式,可以在任何类里面调用这个ui界面,这个ui只用于显示,逻辑还是得靠C++里面的处理!

程序运行截图如下:

程序结构如下:

源码如下:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class Widget : public QWidget
{
    Q_OBJECT

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

protected:
    void setWidget();

protected slots:
    void firstTestBtnClicked();
};

#endif // WIDGET_H

main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

widget.cpp

#include "widget.h"
#include "ui_firsttest.h"
#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>
#include <QMessageBox>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    setWidget();
}


Widget::~Widget()
{

}

void Widget::setWidget()
{
    Ui::Form fromUi;
    fromUi.setupUi(this);
    this->adjustSize();

    connect(fromUi.pushButton, SIGNAL(clicked(bool)), this, SLOT(firstTestBtnClicked()));
}

void Widget::firstTestBtnClicked()
{
    QMessageBox::information(this, "tip", "firstTestBtnClicked called!");
}

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/86645167