2013-05-31 44 views
0

我正在创建一个自定义QPushButton。如果按钮有一个图标,我希望图标居中在按钮上。如果按钮有文本,我希望文本位于按钮的中心。我可以处理这两种情况。如果按钮同时包含图标和文本,我希望图标居中,并在按钮下方绘制文本,位于按钮矩形外部。我正在使用样式表中的边框图像绘制按钮图像。绘制QPushButton文本关闭按钮

内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

你有一个[QToolButton(http://qt-project.org/doc/qt-5.0/qtwidgets/qtoolbutton.html)试图用? – RobbieE

+0

我看着QToolButton,但我不希望文本出现在图标下方。我希望它出现在“明显”按钮图像下方。想象一下,在Designer中放置一个QPushButton。通过属性列表添加一个“图标”属性。然后将QLabel放置在按钮的边界下方。但是QLabel的内容会反映按钮的“文本”属性。我可以这样做,但肯定有办法绘制按钮背景,然后更改按钮的范围,以便我可以在指定位置添加文本? – user2429682

回答

0

看起来像QToolButtonsetToolButtonStyle(Qt::ToolButtonTextUnderIcon)一起工作。

+0

我想要按钮下的文字。我希望图标显示在按钮上,并通过this-> text()返回的字符串在下面绘制,给人的感觉是它是一个QLabel。客户希望通过QtDesigner提供的自定义按钮以这种方式工作。当他们进入“文本”属性时,字符串出现在按钮下方,而“图标”出现在按钮中央。 – user2429682