欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Qt自定义控件-Button

程序员文章站 2022-06-07 13:22:23
...

一 简单的自定义一个控件

  1. 首先创建一个类
  2. 重写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));

}

结果
Qt自定义控件-Button
点击为红色,其他为灰色

三 总结

核心就是重写绘制事件,复杂的界面就用QPainter ,QPen,QColor 等属性去控制

相关标签: Qt