Qt實現自定義控制元件
這篇文章將告訴你在QT中如何去自定義控制元件,這裡以QPushButton為例。如果要實現一個自定義的按鍵類。只需要自定義一個類(這裡我自定一個類:class MyButton)讓它從QPushButton派生。然後,去重新定義,paintEvent、enterEvent、leaveEvent、mousePressEvent、mouseReleaseEvent。paintEvent用於實現繪製介面事件,enterEvent是當滑鼠放在按鍵上時事件、leaveEvent是當滑鼠離開按鍵時事件、mousePressEvent是當滑鼠點選按鍵時事件 、mouseReleaseEvent是當滑鼠離開按鍵時的事件。
具體實現程式碼如下:
自定義按鍵控制元件類標頭檔案 mybutton.h
#ifndef MYBUTTON_H
#define MYBUTTON_H
#include <QPushButton>
#include <QWidget>
#include <QObject>
#include <QPaintEvent>
#include <QEvent>
#include <QMouseEvent>
#include <QPainter>
#include <QToolButton>
/*視窗標題按鍵介面類*/
class MyButton : public QPushButton
{
Q_OBJECT
public:
/*!
* \brief QTitleButton 建構函式,初始化
* \param str_pix pixmap資源的字串路徑
* \param parent 父視窗
*/
QTitleButton(QString str_pix, QWidget *parent = nullptr);
protected:
/*!
* \brief paintEvent 繪圖事件
*/
void paintEvent(QPaintEvent *);
/*!
* \brief enterEvent 滑鼠放在按鍵上事件
*/
void enterEvent(QEvent *);
/*!
* \brief leaveEvent 滑鼠離開按鍵事件
*/
void leaveEvent(QEvent *);
/*!
* \brief mousePressEvent 滑鼠點選按鍵事件
* \param e 滑鼠按鍵型別
*/
void mousePressEvent(QMouseEvent *e);
/*!
* \brief mouseReleaseEvent 滑鼠鬆開按鍵事件
* \param e 滑鼠事件型別
*/
void mouseReleaseEvent(QMouseEvent *e);
private:
//當前的按鍵狀態
int index;
QList<QPixmap> list_pix;
};
#endif // MYBUTTON_H
mybutton.cpp 的實現
#include "mybutton.h"
/*標題按鍵介面類實現*/
QTitleButton::QTitleButton(QString str_pix, QWidget *parent):QPushButton (parent)
{
index = 0;
QPixmap this_pix(str_pix);
//標題欄按鍵png格式為4份不同狀態的圖片
for(int i = 0; i < 3; i++)
{
list_pix << this_pix.copy(i*(this_pix.width()/4), 0, this_pix.width()/4, this_pix.height());
}
}
void QTitleButton::enterEvent(QEvent *)
{
index = 1;
update();
}
void QTitleButton::leaveEvent(QEvent *)
{
index = 0;
update();
}
void QTitleButton::mousePressEvent(QMouseEvent *e)
{
if(e->button() == Qt::LeftButton)
{
index = 2;
emit clicked();
update();
}
}
void QTitleButton::mouseReleaseEvent(QMouseEvent *e)
{
if(e->button() == Qt::LeftButton)
{
index = 0;
update();
}
}
void QTitleButton::paintEvent(QPaintEvent *)
{
QPainter p(this);
QPainter painter(this);
painter.drawPixmap((width()-list_pix.at(index).width())/2,(height()-list_pix.at(index).height())/2
,list_pix.at(index).width()
,list_pix.at(index).height(),list_pix.at(index));//畫圖畫到中間
}
這樣一個自定義的按鍵就完成了。
相關文章
- QT實現可拖動自定義控制元件QT控制元件
- 自定義DropDownList控制元件的實現控制元件
- Qt自定義開關按鈕控制元件QT控制元件
- QT常用控制元件(三)——自定義控制元件封裝QT控制元件封裝
- qt設計器中使用自定義控制元件QT控制元件
- 自定義TextBox控制元件的實現控制元件
- qt自定義控制元件樣式02-QSpinBoxQT控制元件
- 微信小程式Tree自定義控制元件實現微信小程式控制元件
- Android自定義控制元件之自定義ViewGroup實現標籤雲Android控制元件View
- Qt編寫自定義控制元件屬性設計器QT控制元件
- 使用C++和QT實現Log自定義日誌系統C++QT
- 自定義View:自定義屬性(自定義按鈕實現)View
- 栗子——自定義EditText實現右下角計數控制元件控制元件
- Android自定義控制元件之自定義組合控制元件Android控制元件
- Qt Charts 自定義樣式QT
- Android自定義控制元件——自定義屬性Android控制元件
- 基於 RecyclerView 實現的歌詞滾動自定義控制元件View控制元件
- 自定義Switch控制元件控制元件
- 自定義控制元件ViewPager控制元件Viewpager
- 控制元件自定義位置控制元件
- 如何自定義控制元件控制元件
- 自定義控制元件實踐-倒數計時控制元件控制元件
- 4. 自定義控制元件(4) --- 自定義屬性控制元件
- Android自定義控制元件之自定義屬性Android控制元件
- 自定義View:畫布實現自定義View(折線圖的實現)View
- QT自定義精美換膚介面QT
- Net 實現自定義Aop
- EventSource的自定義實現
- 微信分享自定義實現
- Android右滑關閉Activity介面功能-自定義控制元件實現Android控制元件
- Android Paint應用之自定義View實現進度條控制元件AndroidAIView控制元件
- Android自定義控制元件之實現一個球賽比分條Android控制元件
- Android開發自定義控制元件實現一個餅狀圖Android控制元件
- Android 自定義控制元件實現刮刮卡效果 真的就只是刮刮卡麼Android控制元件
- Android自定義日曆控制元件的實現過程詳解Android控制元件
- Android開發自定義控制元件實現一個折線圖Android控制元件
- Qt Creator中滑鼠鍵盤事件的處理實現自定義滑鼠指標QT事件指標
- Qt實現畫板部件並和自定義button按鈕結合例項QT