Qt 實(shí)現(xiàn)管家換膚

一券册、實(shí)現(xiàn)效果截圖


換膚

二、自定義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();

? ? //選項(xiàng)是否選中

? ? void setChecked(bool isChecked);

? ? //設(shè)置圖片

? ? 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));

? ? //信號(hào)與槽

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

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

? ? });

}

SkinItem::~SkinItem()

{

}

/**

* 設(shè)置是否選中

* @brief SkinItem::setChecked

* @param isChecked

*/

void SkinItem::setChecked(bool isChecked)

{

? ? m_pIconlayer->setChecked(isChecked);

? ? m_pIconButton->setChecked(isChecked);

? ? m_pCheckLabel->setVisible(isChecked);

}

/**

* 設(shè)置圖片

* @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=0;i

? ? ? ? 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 =0;i

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

? ? }

? ? emit updateskin(index);

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末施绎,一起剝皮案震驚了整個(gè)濱河市溯革,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谷醉,老刑警劉巖致稀,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異俱尼,居然都是意外死亡抖单,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門遇八,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矛绘,“玉大人,你說我怎么就攤上這事刃永』醢” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵斯够,是天一觀的道長(zhǎng)囚玫。 經(jīng)常有香客問我,道長(zhǎng)读规,這世上最難降的妖魔是什么抓督? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮束亏,結(jié)果婚禮上本昏,老公的妹妹穿的比我還像新娘。我一直安慰自己枪汪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布怔昨。 她就那樣靜靜地躺著雀久,像睡著了一般。 火紅的嫁衣襯著肌膚如雪趁舀。 梳的紋絲不亂的頭發(fā)上赖捌,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼越庇。 笑死罩锐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的卤唉。 我是一名探鬼主播涩惑,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼桑驱!你這毒婦竟也來了竭恬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤熬的,失蹤者是張志新(化名)和其女友劉穎痊硕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體押框,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡岔绸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了橡伞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盒揉。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖骑歹,靈堂內(nèi)的尸體忽然破棺而出预烙,到底是詐尸還是另有隱情,我是刑警寧澤道媚,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布扁掸,位于F島的核電站,受9級(jí)特大地震影響最域,放射性物質(zhì)發(fā)生泄漏谴分。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一镀脂、第九天 我趴在偏房一處隱蔽的房頂上張望牺蹄。 院中可真熱鬧,春花似錦薄翅、人聲如沸沙兰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鼎天。三九已至,卻和暖如春暑竟,著一層夾襖步出監(jiān)牢的瞬間斋射,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留罗岖,地道東北人涧至。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像桑包,于是被迫代替她去往敵國(guó)和親南蓬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 界面 主窗口界面設(shè)計(jì) 標(biāo)題欄:直接設(shè)Window-Title屬性捡多;Window-icon屬性可加圖標(biāo)蓖康。底部狀態(tài)欄:...
    碼園老農(nóng)閱讀 3,740評(píng)論 1 13
  • 鏈接:https://www.cnblogs.com/swarmbees/p/5710714.html 說起下拉框...
    你說啥_f478閱讀 617評(píng)論 0 0
  • 在使用控件布局的時(shí)候,用QFrame做容器垒手,用的最多的就是垂直布局和水平布局蒜焊,再加上垂直和水平的Spacer控件,...
    聯(lián)旺閱讀 592評(píng)論 0 0
  • 1 實(shí)驗(yàn)?zāi)康?目前計(jì)算機(jī)視覺技術(shù)已經(jīng)比較成熟科贬,相關(guān)的開源項(xiàng)目與算法很多泳梆,可以將這些開源算法進(jìn)行整合,進(jìn)而做成一個(gè)小...
    YOUNG_FAN閱讀 6,689評(píng)論 0 50
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月榜掌,有人笑有人哭优妙,有人歡樂有人憂愁,有人驚喜有人失落憎账,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,531評(píng)論 28 53