Qt 5 重写QWidget自定义有边框有标题的PWidget

# 在 Qt 开发中遇到了想给一些控件归类至一个框框内

# 存在多个需求,所以就重写了一个

# 设定了三种尺寸,PW_SAMLL PW_MEDIUM PM_LARGE,有不同的边框大小、标题大小

# 效果如下

PW_SMALL

PW_MEDIUM 

PW_LARGE

.h

#ifndef PWIDGET_H
#define PWIDGET_H

#include <QWidget>
#include <QLayout>
#include <QLabel>

enum{
    PW_SMALL = 0,
    PW_MEDIUM = 1,
    PW_LARGE = 2
};

class PWidget : public QWidget
{
    Q_OBJECT
public:
    explicit PWidget(QWidget *parent = nullptr,
                     int PW_MODE = 0,
                     QLayout *layout = nullptr);
    void setTitle(QString title);
private:
    /** StyleSheet **/
    QString main_label_style_basic = "QLabel{color:	#696969;"
                                     "font-family:微软雅黑;"
                                     "background:#FFFFFF;"
                                     "border:none;";
    QString main_label_style_small = "font-size:12px}";
    QString main_label_style_medium = "font-size:15px}";
    QString main_label_style_large = "font-size:20px}";
    QString main_label_style;

    QString main_widget_style_small = "border:1px solid grey;border-radius:2px;";
    QString main_widget_style_medium = "border:1px solid grey;border-radius:5px;";
    QString main_widget_style_large = "border:1px solid grey;border-radius:10px;";
    QString main_widget_style;

    /** Values**/
    QWidget *parent;
    int PW_MODE;
    int main_label_move_small = 15;
    int main_label_move_medium = 20;
    int main_label_move_large = 25;
    int main_label_move;

    /** Layout**/
    QLayout *layout;

    /** Widgets**/
    QWidget *mainWidget;
    QLabel *mainLabel;

    /** Functions **/
    void setMode();
    void initLayout();
};

#endif // PWIDGET_H

.cpp

#pragma execution_character_set("utf-8")
#include "pwidget.h"
PWidget::PWidget(QWidget *parent,
                 int PW_MODE,
                 QLayout *layout) : QWidget(parent)
{
    this->parent = parent;
    this->PW_MODE = PW_MODE;
    this->layout = layout;

    setMode();
    initLayout();
}

// 根据PW_MODE设置相应的变量
void PWidget::setMode(){
    if(PW_MODE == PW_SMALL){
        main_label_style = main_label_style_basic + main_label_style_small;
        main_label_move = main_label_move_small;
        main_widget_style = main_widget_style_small;
    }
    else if(PW_MODE == PW_MEDIUM){
        main_label_style = main_label_style_basic + main_label_style_medium;
        main_label_move = main_label_move_medium;
        main_widget_style = main_widget_style_medium;
    }
    else if(PW_MODE == PW_LARGE){
        main_label_style = main_label_style_basic + main_label_style_large;
        main_label_move = main_label_move_large;
        main_widget_style = main_widget_style_large;
    }
    else{
        main_label_style = main_label_style_basic + main_label_style_small;
        main_label_move = main_label_move_small;
        main_widget_style = main_widget_style_small;
    }
}

// 初始化布局
void PWidget::initLayout(){
    mainLabel = new QLabel(this);
    mainLabel->setStyleSheet(main_label_style);

    mainWidget = new QWidget(this);
    mainWidget->setStyleSheet(main_widget_style);
    mainWidget->setLayout(layout);

    mainLabel->move(main_label_move + 5, 0);
    mainWidget->move(5, main_label_move / 2);
    mainWidget->setFixedWidth(parent->width() - 10);
    mainLabel->setText(" 无标题 ");

    mainWidget->raise();
    mainLabel->raise();
}

// 设置标题
void PWidget::setTitle(QString title){
    mainLabel->setText(" " + title + " ");
}

调用

#include "pwidget.h"

PWidget *widget = new PWidget(this, PW_LARGE, mainLayout);
widget->setTitle("PW_LARGE");

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值