美文网首页
Qt 自绘按钮控件

Qt 自绘按钮控件

作者: moriv4 | 来源:发表于2020-04-23 21:59 被阅读0次

Qt5 自绘按钮控件,实现高度个性化的功能。核心思想是重写paintEvent等各种事件处理函数,根据当前状态在QPaintDevice上绘制图像。

效果:


pic1

MPushButton.h

#ifndef MPUSHBUTTON_H
#define MPUSHBUTTON_H

#include <QPushButton>
#include <QLineEdit>

class MPushButton : public QPushButton
{
    Q_OBJECT

public:
    MPushButton(QWidget *parent = nullptr);
    ~MPushButton() override;

protected:
    void paintEvent(QPaintEvent *event) override;
    void enterEvent(QEvent *event) override;
    void leaveEvent(QEvent *event) override;
    void mousePressEvent(QMouseEvent *event) override;
    void mouseReleaseEvent(QMouseEvent *event) override;
    bool isHover = false;
    bool isPressed = false;
};

#endif // MPUSHBUTTON_H

MPushButton.cpp

#include <QPainter>
#include <QPen>
#include <QBrush>
#include <QColor>
#include <QRect>
#include <QDebug>
#include "MPushButton.h"

MPushButton::MPushButton(QWidget *parent)
    : QPushButton(parent)
{
}

MPushButton::~MPushButton()
{
}

void MPushButton::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing, true);
    QColor blue;
    if (isHover)
        blue.setRgb(93, 173, 226);
    else
        blue.setRgb(53, 152, 219);

    if (isPressed)
        blue.setRgb(46, 134, 193);

    // draw background of the button
    QBrush brush(blue);
    painter.setPen(Qt::NoPen);
    painter.setBrush(brush);
    painter.drawRoundedRect(QRectF(0,0, this->width() , this->height()), 15, 15);
    // draw text
    painter.setPen(QPen(QColor(215, 219, 221)));
    painter.setFont(font());
    painter.drawText(rect(), Qt::AlignCenter, text());

}

void MPushButton::enterEvent(QEvent *event)
{
    isHover = true;
    QPushButton::enterEvent(event);
}

void MPushButton::leaveEvent(QEvent *event)
{
    isHover = false;
    QPushButton::leaveEvent(event);

}

void MPushButton::mousePressEvent(QMouseEvent *event)
{
    isPressed = true;
    QPushButton::mousePressEvent(event);
    move(this->x(), this->y() + 5);
}

void MPushButton::mouseReleaseEvent(QMouseEvent *event)
{
    isPressed = false;
    QPushButton::mouseReleaseEvent(event);
    move(this->x(), this->y() - 5);
}

相关文章

  • Qt 自绘按钮控件

    Qt5 自绘按钮控件,实现高度个性化的功能。核心思想是重写paintEvent等各种事件处理函数,根据当前状态在Q...

  • 2.6 容器控件(一)

    今天及后面几天,小豆君主要来讲一下Qt其它常用控件的用法。主要包括: 容器控件 按钮控件 输入控件 显示控件显示控...

  • Flat风格的Qml按钮

    使用Qml的Button控件修改而成。 源码 Button源码 按钮组样式源码 关于更多请关注公众号Qt君。

  • 自定义控件的实现

    自定义控件可以按类型分三种,自绘控件、组合控件和继承控件 自绘控件:View上所展示的所有内容都是我们自己写在on...

  • 自定义View记录

    自定义View只要有三种类型:自绘控件、组合控件、继承控件。 自绘控件 自定义View主要是因为系统的内置View...

  • 我写了一篇文章《ISO入门之UIView(二)》

    *按钮控件(Button) 按钮控件是最常用的控件之一。iOS中按钮控件Button直接继承于UIControl:...

  • QT如何封装按钮控件,实现按钮图片化

    写在前面 此篇开始是对旅行模拟系统中遇到的问题的总结记录,以及相关知识点的记录,以备后续查看。 按钮封装是比较基础...

  • 11.7

    今天学习了列表框控件、组合框控件、单选按钮控件、复选按钮控件、分组框控件。。。。。

  • flutter自绘组件

    1.自绘控件 2.自绘接口 参考:https://book.flutterchina.club/chapter10...

  • 11.7

    第七章的列表框控件、组合框控件、单选按钮控件、复选按钮控件、分组框控件。

网友评论

      本文标题:Qt 自绘按钮控件

      本文链接:https://www.haomeiwen.com/subject/ppizihtx.html