我正在创建一个自定义的QPushButton。如果按钮有一个图标,我希望图标在按钮的中心。如果按钮有文本,我希望文本位于按钮的中心。这两种情况我都能处理。如果按钮既包含图标又包含文本,我希望图标居中,文本绘制在按钮下方,位于按钮矩形之外。我在样式表中使用border-image绘制按钮图像。
在MyPushButton::paintEvent()中,我计算了一个矩形,并使用:
绘制图标 style()->drawItemPixmap(&p, iconRect, Qt::AlignLeft | Qt::AlignVCenter,
this->icon().pixmap(iconRect.size()));
然后在按钮下方计算一个文本矩形,并这样做:
style()->drawItemText(&p, textRect, Qt::AlignCenter, (this->palette()),
true, this->text(), QPalette::ButtonText );
但是文本不可见
我认为这必须与指定的"可绘制"区域有关,但我不知道如何扩展该区域,以便按钮图像不会填充我想放置文本的区域。
我可以做到这一点与QStyle::drawControl()过载,但我不知道为什么。当我将代码跟踪到CE_PushButtonLabel案例时,myStyle->rect已经被调整为足够大以适合按钮图像和文本。
看起来像QToolButton
和setToolButtonStyle(Qt::ToolButtonTextUnderIcon)
的工作