从按钮上绘制QPushButton文本

时间:2013-05-31 15:15:18

标签: qt qtstylesheets qpushbutton qstyle

我正在创建一个自定义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已经被调整为足够大以适合按钮图像和文本。

1 个答案:

答案 0 :(得分:0)

看起来像QToolButton的作业以及setToolButtonStyle(Qt::ToolButtonTextUnderIcon)