2013-05-31 78 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