QT纯代码设计UI界面&Demo

目录

一、前言

二、界面

三、源码简析

四、Demo/源码


一、前言

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

  • 9
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值