欢迎大家来到IT世界,在知识的湖畔探索吧!
本篇介绍不用QSS样式表实现按钮的三态,通过重写paintEvent函数,实现自定义按钮的重绘。在ui文件中通过提升法将按钮控件由QPushButton提升为CustomPushButton。
在项目中新建一个C++类。
基类可以选择QWidget或者不选,自己修改生成的代码也可以。
修改代码
将生成的代码修改成:
class CustomPushButton : public QPushButton
{
Q_OBJECT
public:
explicit CustomPushButton(QWidget *parent = nullptr);
signals:
public slots:
};
欢迎大家来到IT世界,在知识的湖畔探索吧!
- 新建的CustomPushButton按钮类继承QPushbutton。
- 析构函数后的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();
}
提升类
- 选中按钮控件,点击“提升为”。
- 在提升的类名称内输入:自定义的按钮类名,我的是CustomPushButton。
- 点击添加,再点击提升。
点击运行
通过自定义按钮类,可以实现各种图形的按钮,实用性更强。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/17475.html