目录
一、前言
UI的设计方法有几种:
①一种是使用Qt Designer,也就是可视化设计,这在小型项目中常见,优点就是可观简便;
②另一种就是纯代码设计UI,也就是不可视设计UI,这在中大型项目常见,优点是界面隐蔽性强。
无论那种方式,实际上都是转化为第二种的方式,只是第一种是QT已经帮忙处理了,处理成第二种纯代码的形式。
本文简析纯代码设计UI的Demo,大家在项目中可以直接套用。
二、界面
界面设计很简便,两个label,两个button,button配槽函数,请配合源码看
三、源码简析
①源码结构
②工程里需要加入model
CUI.pro
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = CUI
TEMPLATE = app
SOURCES += main.cpp \
CUI.cpp
HEADERS += \
CUI.h
③在main里显示CUI界面类
main.cpp
#include <QApplication>
#include "CUI.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv); //注意是QApplication
CUI ui;
ui.show();
return a.exec();
}
④界面类的设计:
CUI.h
#ifndef CUI_H
#define CUI_H
#include <QWidget>
class CUI : public QWidget
{
Q_OBJECT
class Impl;
public:
explicit CUI(QWidget *parent = 0);
~CUI();
private slots:
void stClickedbutton1();
void stClickedbutton2();
private:
//使用智能指针处理界面的内容
QScopedPointer<Impl> m_Impl;
};
#endif // CUI_H
CUI.cpp
#include "CUI.h"
#include <QPushButton>
#include <QLabel>
#include <QGridLayout>
//定义界面类的键和函数
class CUI::Impl
{
public:
QLabel* label_1;
QPushButton* button_1;
QLabel* label_2;
QPushButton* button_2;
void setupUi(QWidget* parent);
void retranslate(QWidget* parent);
void signalSlot(QWidget* parent);
};
//初始化布局
void CUI::Impl::setupUi(QWidget *parent)
{
label_1 = new QLabel;
button_1 = new QPushButton;
label_2 = new QLabel;
button_2 = new QPushButton;
QGridLayout* glayReview = new QGridLayout(parent);
glayReview->setContentsMargins(10, 10, 10, 10);
glayReview->addWidget(label_1, 0, 0, 1, 1);
glayReview->addWidget(button_1, 0, 1, 1, 1);
glayReview->addWidget(label_2, 1, 0, 1, 1);
glayReview->addWidget(button_2, 1, 1, 1, 1);
retranslate(parent);
signalSlot(parent);
}
//初始化名称size等
void CUI::Impl::retranslate(QWidget* parent)
{
label_1->setText("label_1");
button_1->setText("button_1");
label_2->setText("label_2");
button_2->setText("button_2");
label_1->setMinimumWidth(150);
button_1->setMinimumWidth(100);
label_2->setMinimumWidth(150);
button_2->setMinimumWidth(100);
parent->setFixedSize(250,250);
}
//初始化信号槽
void CUI::Impl::signalSlot(QWidget *parent)
{
connect(button_1, SIGNAL(clicked()), parent, SLOT(stClickedbutton1()));
connect(button_2, SIGNAL(clicked()), parent, SLOT(stClickedbutton2()));
}
CUI::CUI(QWidget *parent) :
QWidget(parent),m_Impl(new Impl)
{
//设置UI
m_Impl->setupUi(this);
}
CUI::~CUI()
{
}
void CUI::stClickedbutton1()
{
m_Impl->label_1->setText("label_1_change");
}
void CUI::stClickedbutton2()
{
m_Impl->label_2->setText("label_2_change");
}
四、Demo/源码
链接:https://pan.baidu.com/s/1IfprWv2D5nxA88yNFXlPLw
提取码:pn49