当前位置:网站首页>关于非虚函数的假派生
关于非虚函数的假派生
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();
}
边栏推荐
- Deno介绍
- Princeton University, Peking University & UIUC | offline reinforcement learning with realizability and single strategy concentration
- 下一个行业风口:NFT 数字藏品,是机遇还是泡沫?
- Mysql database operation
- SWC introduction
- [concept] Web basic concept cognition
- Image super-resolution using deep convolutional networks(SRCNN)解读与实现
- pytorch加载数据
- What are the principles of software design (OCP)
- SAP ALV颜色代码对应颜色(整理)
猜你喜欢
随机推荐
1.16 - 校验码
js凡客banner轮播图js特效
Differences and application scenarios between resulttype and resultmap
Safety science to | travel, you must read a guide
JS regular filtering and adding image prefixes in rich text
jsscript
真机无法访问虚拟机的靶场,真机无法ping通虚拟机
Jenkins basic knowledge ----- detailed explanation of 03pipeline code
Selenium share
Quartz misfire missed and compensated execution
Modeling specifications: naming conventions
给新人工程师组员的建议
Pelosi: Congress will soon have legislation against members' stock speculation
Esbuild & SWC: a new generation of construction tools
Performance test method of bank core business system
2.1 rtthread pin设备详解
I sorted out a classic interview question for my job hopping friends
Lua uses require to load the shared library successfully, but the return is Boolean (always true)
Mysql database operation
Image super-resolution using deep convolutional networks(SRCNN)解读与实现