版权声明:本文为博主原创文章,未经博主允许不得转载。 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!");
}