当前位置:网站首页>关于非虚函数的假派生
关于非虚函数的假派生
2022-07-06 03:21:00 【氺月洞天】
以QPushButton的initStyleOption为例
先看源码,该函数为保护函数
void QPushButton::initStyleOption(QStyleOptionButton *option) const
{
if (!option)
return;
Q_D(const QPushButton);
option->initFrom(this);
option->features = QStyleOptionButton::None;
if (d->flat)
option->features |= QStyleOptionButton::Flat;
#if QT_CONFIG(menu)
if (d->menu)
option->features |= QStyleOptionButton::HasMenu;
#endif
if (autoDefault())
option->features |= QStyleOptionButton::AutoDefaultButton;
if (d->defaultButton)
option->features |= QStyleOptionButton::DefaultButton;
if (d->down || d->menuOpen)
option->state |= QStyle::State_Sunken;
if (d->checked)
option->state |= QStyle::State_On;
if (!d->flat && !d->down)
option->state |= QStyle::State_Raised;
option->text = d->text;
option->icon = d->icon;
option->iconSize = iconSize();
}
重写该函数:
头文件
#ifndef XX_H
#define XX_H
#include <QtWidgets>
class PushButton : public QPushButton
{
public:
PushButton(QWidget *parent);
~PushButton();
void paintEvent(QPaintEvent *) override;
};
#endif // XX_H
源文件
#include "xx.h"
#include "private/qpushbutton_p.h"
PushButton::PushButton(QWidget *parent)
: QPushButton(parent)
{
}
PushButton::~PushButton()
{
}
void PushButton::paintEvent(QPaintEvent *)
{
QStylePainter p(this);
QStyleOptionButton option;
QPushButton::initStyleOption(&option);
p.drawControl(QStyle::CE_PushButton, option);
}
void QPushButton::initStyleOption(QStyleOptionButton *option) const
{
qInfo() << __LINE__;
if (!option)
return;
Q_D(const QPushButton);
option->initFrom(this);
option->features = QStyleOptionButton::None;
if (d->flat)
option->features |= QStyleOptionButton::Flat;
#if QT_CONFIG(menu)
if (d->menu)
option->features |= QStyleOptionButton::HasMenu;
#endif
if (autoDefault())
option->features |= QStyleOptionButton::AutoDefaultButton;
if (d->defaultButton)
option->features |= QStyleOptionButton::DefaultButton;
if (d->down || d->menuOpen)
option->state |= QStyle::State_Sunken;
if (d->checked)
option->state |= QStyle::State_On;
if (!d->flat && !d->down)
option->state |= QStyle::State_Raised;
option->text = d->text;
option->icon = d->icon;
option->iconSize = iconSize();
}
边栏推荐
- BUUCTF刷题笔记——[极客大挑战 2019]EasySQL 1
- Force buckle 1189 Maximum number of "balloons"
- ArabellaCPC 2019(补题)
- SAP ALV单元格级别设置颜色
- Erreur de la carte SD "erreur - 110 whilst initialisation de la carte SD
- Polymorphic day02
- 【SLAM】lidar-camera外参标定(港大MarsLab)无需二维码标定板
- Map sorts according to the key value (ascending plus descending)
- OCR文字識別方法綜述
- How to choose PLC and MCU?
猜你喜欢
随机推荐
NR modulation 1
Shell 传递参数
SWC介绍
Problems encountered in 2022 work IV
JS regular filtering and adding image prefixes in rich text
3857 Mercator coordinate system converted to 4326 (WGS84) longitude and latitude coordinates
MySQL Server层四个日志
Polymorphic day02
These are not very good
如何做好功能测试
How to write compile scripts compatible with arm and x86 (Makefile, cmakelists.txt, shell script)
手写数据库客户端
记录一下逆向任务管理器的过程
IPv6 jobs
SAP ALV颜色代码对应颜色(整理)
Inherit day01
Mysqldump data backup
多态day02
SWC introduction
Leetcode problem solving -- 108 Convert an ordered array into a binary search tree