QT5 – Qt Creator自定义QPushButton[亲测有效]

QT5 – Qt Creator自定义QPushButton[亲测有效]本篇介绍不用QSS样式表实现按钮的三态,通过重写paintEvent函数,实现自定义按钮的重绘。在ui文件中通过提升法将按钮控件由QPushBu

欢迎大家来到IT世界,在知识的湖畔探索吧!

本篇介绍不用QSS样式表实现按钮的三态,通过重写paintEvent函数,实现自定义按钮的重绘。在ui文件中通过提升法将按钮控件由QPushButton提升为CustomPushButton。

在项目中新建一个C++类。

基类可以选择QWidget或者不选,自己修改生成的代码也可以。

QT5 - Qt Creator自定义QPushButton[亲测有效]

修改代码

将生成的代码修改成:

class CustomPushButton : public QPushButton
{
   Q_OBJECT
public:
  explicit CustomPushButton(QWidget *parent = nullptr);
signals:
public slots:
};

欢迎大家来到IT世界,在知识的湖畔探索吧!

  1. 新建的CustomPushButton按钮类继承QPushbutton。
  2. 析构函数后的QWidget *parent是该按钮的父控件。

重写事件

  • paintEvent事件
欢迎大家来到IT世界,在知识的湖畔探索吧!void CustomPushButton::paintEvent(QPaintEvent *e)
{
    QPushButton::paintEvent(e);
    QPainter painter(this);
    painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
    if(isHovered)
    {
        painter.setBrush(HoveredBgColor);
    }
    else if (isChecked())
    {
        painter.setBrush(CheckedBgColor);
    }
    else
    {
        painter.setBrush(normalBgColor);
    }
    int width = this->width();
    int height = this->height();
    QRect borderRect(0, 0, width, height);
    QPen pen(borderColor);
    painter.setPen(pen);
    painter.drawRect(borderRect);
    QRect textRect(0, 0, width, height);
    QPen textPen(Qt::black);
    painter.setPen(textPen);
    painter.setFont(this->font());
    painter.drawText(textRect, Qt::AlignCenter, this->text());
}
  • 重写leaveEvent事件
void CustomPushButton::leaveEvent(QEvent *e)
{
    isHovered = false;
    update();
}
  • 重写enterEvent事件
欢迎大家来到IT世界,在知识的湖畔探索吧!void CustomPushButton::enterEvent(QEvent *e)
{
    isHovered = true;
    update();
}

提升类

  1. 选中按钮控件,点击“提升为”。
  2. 在提升的类名称内输入:自定义的按钮类名,我的是CustomPushButton。
  3. 点击添加,再点击提升。
QT5 - Qt Creator自定义QPushButton[亲测有效]

提升1

QT5 - Qt Creator自定义QPushButton[亲测有效]

提升2

点击运行

QT5 - Qt Creator自定义QPushButton[亲测有效]

运行界面

通过自定义按钮类,可以实现各种图形的按钮,实用性更强。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/17475.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信