Qt 实现管家换肤

Qt 实现管家换肤,第1张

一、实现效果截图

二、自定义Widget

1、SkinItem.h 文件

#ifndef SKINITEM_H

#define SKINITEM_H

#include <QWidget>

#include <QLabel>

#include <QPushButton>

#include <QGridLayout>

class SkinItem : public QWidget

{

    Q_OBJECT

public:

    explicit SkinItem(QWidget *parent = nullptr)

    ~SkinItem()

    //选项是否选中

    void setChecked(bool isChecked)

    //设置图片

    void setPixmap(QString icon,QString content)

private:

    QLabel *m_pContentLabel//皮肤名称

    QLabel *m_pCheckLabel//选中

    QPushButton *m_pIconButton//皮肤图片

    QPushButton *m_pIconlayer//皮肤图层

    int defwidth,defheight//宽高

    bool ischecked = false

    //图片样式

    QString style = "QPushButton#SkinItemIcon{"

                    "border:none"

                    "background-image:url(%0)"

                    "}"

                    "QPushButton#SkinItemIcon:checked{"

                    "border: 3px solid white"

                    "}"

signals:

    void clicked(QString)

}

#endif // SKINITEM_H

2、SkinItem.cpp 文件

#include "SkinItem.h"

SkinItem::SkinItem(QWidget *parent) :

    QWidget(parent),

    defwidth(118),

    defheight(78)

{

    //皮肤文本

    m_pContentLabel = new QLabel(this)

    m_pContentLabel->setObjectName("SkinItemTitle")

    m_pContentLabel->setText("皮肤名称")

    m_pContentLabel->setFixedHeight(16)

    //图片

    m_pIconButton = new QPushButton(this)

    m_pIconButton->setFixedSize(QSize(defwidth,defheight))

    m_pIconButton->setObjectName("SkinItemIcon")

    m_pIconButton->setCheckable(true)

    //图片图层

    m_pIconlayer = new QPushButton(m_pIconButton)

    m_pIconlayer->setFixedSize(QSize(defwidth,defheight))

    m_pIconlayer->setObjectName("SkinItemIconlayer")

    m_pIconlayer->setCheckable(true)

    m_pIconlayer->raise()

    //选中控件

    m_pCheckLabel = new QLabel(m_pIconlayer)

    m_pCheckLabel->setFixedSize(20,20)

    m_pCheckLabel->setScaledContents(true)

    m_pCheckLabel->setObjectName("SkinItemCheck")

    m_pCheckLabel->move(defwidth*0.78,defheight*0.68)

    m_pCheckLabel->setVisible(false)

    //布局

    QVBoxLayout *mainlayout = new QVBoxLayout

    mainlayout->setMargin(0)

    mainlayout->setSpacing(0)

    mainlayout->addWidget(m_pIconButton,0,Qt::AlignCenter)

    mainlayout->addWidget(m_pContentLabel,0,Qt::AlignHCenter)

    setLayout(mainlayout)

    setFixedSize(QSize(defwidth,112))

    //信号与槽

    QObject::connect(m_pIconlayer, &QPushButton::clicked, [this](bool) {

        emit clicked(m_pContentLabel->text().trimmed())

    })

}

SkinItem::~SkinItem()

{

}

/**

* 设置是否选中

* @brief SkinItem::setChecked

* @param isChecked

*/

void SkinItem::setChecked(bool isChecked)

{

    m_pIconlayer->setChecked(isChecked)

    m_pIconButton->setChecked(isChecked)

    m_pCheckLabel->setVisible(isChecked)

}

/**

* 设置图片

* @brief SkinItem::setPixmap

* @param icon

*/

void SkinItem::setPixmap(QString icon, QString content)

{

    m_pIconButton->setStyleSheet(style.arg(icon))

    m_pContentLabel->setText(content)

}

3、使用

    QStringList namelist<<"海之夕阳"<<"阳之光芒"<<"樱花夕阳"<<"未来之途"

    QGridLayout *gridlayout = new QGridLayout

    for (uint8_t i=0i

        SkinItem *skinitem = new SkinItem

        skinitem->setPixmap(QString(":/image/skin/skin%0.png").arg(i),namelist.at(i))

        itemList.append(skinitem)

        gridlayout->addWidget(skinitem,0,i,1,1)

        if(currentId == i){

            skinitem->setChecked(true)

        }

        QObject::connect(skinitem,&SkinItem::clicked,[this](QString str){

            setItemChecked(str)

        })

    }

void SkinDialog::setItemChecked(QString str)

{

    int index = namelist.indexOf(str)

    if(currentId == index){

        return

    }

    currentId = index

    for (uint8_t i =0i

        itemList.at(i)->setChecked(i == index)

    }

    emit updateskin(index)

}

不知你想设置什么? 如想更改设备信息,可在“系统设置”中选“设备定义”进行更改。 如想更改板号,可调整板子上的拨码开关。不过不建议对系统信息进行更改,可能会造成原有信息的混乱。 工程验收之后基本信息已经消防备案,如更改较大应有消防审批及设计变更手续 最好请当地厂家技术员进行更改! www.768yy.com

满意请采纳


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12019712.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存