接觸過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例項 分別用兩個垂直布局管理器...