DFontManager
字号分为十个等级,T1-T10,默认为 T6 级别,当系统中字号大小改变时,所有级别基于默认级别进行同值增减。例如,T6 当前对应的字号为 16px,在控制中心将字号调整为 20px 后,T1-T10 的字号都将增加 4px。所有的控件设计中均不可直接指定字号大小,如果需要对特定的 QWidget 对象设置字号等级,可以使用 DFontSizeManager::bind 接口绑定到对应的级别。
DSuggestButton
,QStyle 中已经包含了 QStyle::CE_PushButton 的定义,这部分不用再进行扩展,查看 QStyleOptionButton,它在 ButtonFeatures 中定义了按钮的一些特性,因此我们需要继承 QStyleOptionButton 进行扩展。
class DStyleOptionButton : public QStyleOptionButton, public DStyleOption
public:
enum ButtonFeature {
SuggestButton = (CommandLinkButton << 1),
WarningButton = (SuggestButton << 1)
void init(QWidget *widget) override;
这是 DStyleOptionButton 的代码实现,添加了两个枚举值 SuggestButton、WarningButton。在 DSuggestButton 的 paintEvent 中将使用这些新加的值绘制自定义的按钮。
void DSuggestButton::paintEvent(QPaintEvent *event)
Q_UNUSED(event)
QStylePainter p(this);
DStyleOptionButton option;
option.features |= DStyleOptionButton::ButtonFeatures(DStyleOptionButton::SuggestButton);
initStyleOption(&option);
option.init(this);
p.drawControl(QStyle::CE_PushButton, option);
最终,对 QStylePainter::drawControl 的调用将变为对 QStyle::drawControl 的调用。
XXX::drawControl(ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w = nullptr)
switch(element) {
case CE_PushButton:
...
QStyleOptionButton *opt_button = static_case<QStyleOptionButton*>(opt);
if (opt_button->features.testFlag(DStyleOptionButton::SuggestButton)) {
...
break;
这样即完成了对 DSuggestButton 的绘制。
QtExamples
欢迎 star
和 fork
这个系列的 QT / DTK 学习,附学习由浅入深的目录。
- 本文作者:偕臧
- 本文链接:https://ifmet.cn/posts/525116e/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。