Qt之自定義控制項(開關按鈕)

2022-04-29 18:15:06 字數 3077 閱讀 2638

接觸過ios系統的童鞋們應該對開關按鈕很熟悉,在設定裡面經常遇到,切換時候的滑動效果比較帥氣。

通常說的開關按鈕,有兩個狀態:on、off。

下面,我們利用自定義控制項來實現乙個開關按鈕。

更多參考

其餘介面用於擴充套件,也可自己擴充。

switchcontrol.h

#ifndef switch_control

#define switch_control

#include

#include

class switchcontrol : public qwidget

;#endif // switch_control

switchcontrol.cpp

#include

#include

#include

"switchcontrol.h"

switchcontrol::switchcontrol(qwidget *

parent)

: qwidget(parent),

m_nheight(16),

m_bchecked(false),

m_radius(8.0),

m_nmargin(3),

m_checkedcolor(0, 150, 136),

m_thumbcolor(qt::white),

m_disabledcolor(190, 190, 190),

m_background(qt::black)

// 繪製開關

void switchcontrol::paintevent(qpaintevent *event)

else

} else

// 繪製大橢圓

painter.setbrush(background);

painter.setopacity(dopacity);

path.addroundedrect(qrectf(m_nmargin, m_nmargin, width() -

2* m_nmargin, height() -

2* m_nmargin), m_radius, m_radius);

painter.drawpath(path.simplified());

// 繪製小橢圓

painter.setbrush(thumbcolor);

painter.setopacity(1.0);

painter.drawellipse(qrectf(m_nx - (m_nheight /

2), m_ny - (m_nheight /

2), height(), height()));

}// 滑鼠按下事件

void switchcontrol::mousepressevent(qmouseevent *event)

else

}}// 滑鼠釋放事件 - 切換開關狀態、發射toggled()訊號

void switchcontrol::mousereleaseevent(qmouseevent *event)

else

}}// 大小改變事件

void switchcontrol::resizeevent(qresizeevent *event)

// 預設大小

qsize switchcontrol::sizehint() const

// 最小大小

qsize switchcontrol::minimumsizehint() const

// 切換狀態 - 滑動

void switchcontrol::ontimeout()

else

update();

}// 返回開關狀態 - 開啟:true 關閉:false

bool switchcontrol::istoggled() const

// 設定開關狀態

void switchcontrol::settoggle(bool checked)

// 設定背景顏色

void switchcontrol::setbackgroundcolor(qcolor color)

// 設定選中顏色

void switchcontrol::setcheckedcolor(qcolor color)

// 設定不可用顏色

void switchcontrol::setdisbaledcolor(qcolor color)

下面,我們來實現一組開關按鈕。

為了演示,可以設定開關的樣式、以及狀態等效果。

switchcontrol *pswitchcontrol = new switchcontrol(this);

switchcontrol *pgreenswitchcontrol = new switchcontrol(this);

switchcontrol *pdisabledswitchcontrol = new switchcontrol(this);

// 設定狀態、樣式

pgreenswitchcontrol->settoggle(true);

pgreenswitchcontrol->setcheckedcolor(qcolor(0, 160, 230));

pdisabledswitchcontrol->setdisabled(true);

pdisabledswitchcontrol->settoggle(true);

// 連線訊號槽

connect(pswitchcontrol, signal(toggled(bool)), this, slot(ontoggled(bool)));

實現乙個簡單的槽函式,當開關按鈕效果變化時,就會觸發,列印當前的狀態。

void mainwindow::ontoggled(bool bchecked)

Qt 控制項 自定義按鈕

mybutton.h ifndef mybutton h define mybutton h include include include include class mybutton public qwidget endif mybutton h mybutton.cpp include myb...

QT學習記錄 自定義開關按鈕

簡單的按鈕開關實現 自定義類派生於qwidget 在上面畫2個圓形和乙個矩形,合成乙個開關樣式,再讓其中乙個圓形填充不一樣的顏色就好了。switchbutton.h ifndef switchbutton h define switchbutton h include include include...

Qt 自定義按鈕

自定義控制項的實現思路如下 a1.新建乙個類,該類繼承qpushbutton,由於qpushbutton繼承於qwidget,因此可以直接在該繼承類裡面進行布局管理和掛載控制項 a2.新建兩個qlabel例項,即buttonimage和buttontxt 是qlable例項 分別用兩個垂直布局管理器...