2013-06-27 254 views
5

我對Qt的樣式表方法相當陌生,我正在調整QPushButton上圖標和文本之間的間距。如何使用樣式表更改QPushButton圖標/文本間距?

這是我指的差距:http://imageshack.us/scaled/thumb/593/4kem.png(計算器不會讓我張貼圖片還)

QPushButton { 
    qproperty-icon: theme_url("/button_action/add"); 
    qproperty-iconSize: 14px; 
} 

有一個參數,我可以用它來調整這個空間?我試過marginpadding,spacing?也許我可以用一個不同的選擇器來抓取圖標?

+1

我還沒有看到任何有用的樣式表,也許你可以只使用按鈕的文本中的空格? ;) – ariwez

+1

系統中有很多按鈕,所以我希望有一個一站式的答案,而不是必須手動更改它們... – hannahd

+0

您可以修改圖標以擴大以彌補差距?據我所知,沒有這樣的樣式表屬性。您可以根本不在按鈕上設置文本和圖標,而是在按鈕上設置佈局,並插入2個標籤,其中1個用於圖標,另一個用於文本 – cppguy

回答

0

實際上,使用QPushButton你是不走運的。您可以在qt documentation(我假設您使用qt5,但它也可用於其他版本)中找到樣式按鈕的工作選項的完整列表。

如果你想對圖標進行更多的控制,通常會推薦使用QToolButton來交換你的QPushButtons,它們完全一樣,只是它們有額外的功能使它們與工具欄兼容 - 並且它們有更多的圖標放置選項。但是這可能不適合你,因爲as you can see它們的樣式與QPushButtons完全相同。但是請查看「toolButtonStyle」參數,該參數允許您移動圖標。

列表中的下一個來改變作品。如果所有你想要的是更多的空間,那麼只需將額外的空像素添加到藝術品。這真的傷害了完美主義者的思想,但卻很有效。

接下來的列表來自派生QPushButton並自己重寫繪畫。聽起來比它更令人望而生畏。在Qt中進行子類化已經成爲一種習慣,並且效果很好。這裏是jiffie中的tutorial i googled(對於4.8而言應該大致相同),就子類而言。它甚至覆蓋覆蓋繪畫事件。

希望這有幫助。

0

至少在Qt5.5(這可能會改變,未來,我希望),除了覆蓋繪畫事件,這是複雜的,在我看來只是一個簡單的事情混亂,沒有固有的Qt方式來移動在這裏或那裏圖標幾個像素(小調整)。如果您刪除圖標並使用樣式表在資源URL中將background設置爲您的圖標,則可以在樣式表中使用background-position屬性,但不幸的是,它只接受像center,left等單詞,而不是像素調整。

下面是我解決這個問題的方法。我創建的透明PNG比我需要的稍大,我在PNG內部的圖標本身附近有一個4像素的邊距。然後,我只是將該圖標移動到該畫布中,並將其重新加載到項目資源文件中,然後再次將其與QPushButton的設計器中的圖標屬性進行映射,並且工作正常。我現在有左側正確排列的圖標,旁邊有文字。我甚至可以擴大圖標和文字之間的差距。

0

最簡單的方法是創建自己的繼承自QPushButton的類並重寫PaintEvent,然後手動將圖標的位圖放在任何你想要的位置。

0

從Qt5.7開始,我不知道任何圖標/文本間距的內置功能。 我通常會做的是給圖像一些更多的空間,並相應地設置按鈕的圖標大小。

解決方案

  1. 調整你的圖標文件,以32×16像素,但因爲是離開它的內容。
  2. 在按鈕上調用setIconSize(QSize(32,16))。

結果:現在它的圖標和文本之間有16像素的空白空間。 32像素就是我的例子,你當然可以設置額外的大小來適應你的風格。

如果您想要將其應用於所有按鈕元素,只需創建一個在構造函數中自動執行的小子類即可。爲此,真的不需要重寫paintEvent方法。

相關問題