Qt自定义控件-Button
程序员文章站
2022-06-07 13:22:23
...
一 简单的自定义一个控件
- 首先创建一个类
- 重写paintEvent 事件,这个demo定义的是一个button,所以还要重写鼠标点击事件
二 代码
头文件
#ifndef QMYBUTTON_H
#define QMYBUTTON_H
#include <QWidget>
#include <QPainter>
namespace Ui {
class QMyButton;
}
class QMyButton : public QWidget
{
Q_OBJECT
public:
explicit QMyButton(QWidget *parent = 0);
~QMyButton();
protected:
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void paintEvent(QPaintEvent *event);
private:
Ui::QMyButton *ui;
QString m_strTitle = "Button";//button上显示的文本
QRect m_rect={ 0, 0, 100, 30 };//button的位置和大小
bool m_pressed = false;//button是否被按下
};
#endif // QMYBUTTON_H
cpp
#include "qmybutton.h"
#include "ui_qmybutton.h"
#include <QMouseEvent>
QMyButton::QMyButton(QWidget *parent) :
QWidget(parent),
ui(new Ui::QMyButton)
{
ui->setupUi(this);
}
QMyButton::~QMyButton()
{
delete ui;
}
void QMyButton::mousePressEvent(QMouseEvent *event)
{
m_pressed = true;
update();//update函数的作用: 调用时,相当于手动调用绘图事件。
}
void QMyButton::mouseReleaseEvent(QMouseEvent *event)
{
m_pressed = false;
update();
}
void QMyButton::paintEvent(QPaintEvent *event)
{
QPainter pointer(this);
if (m_pressed)
{
pointer.setBrush(Qt::red);
}
else
{
pointer.setBrush(Qt::gray);
}
pointer.drawRect(m_rect);
pointer.drawText(m_rect, m_strTitle, QTextOption(Qt::AlignCenter));
}
结果
点击为红色,其他为灰色
三 总结
核心就是重写绘制事件,复杂的界面就用QPainter ,QPen,QColor 等属性去控制