2012-01-24 26 views
3

在我的應用程序中,用戶單擊我的程序的任何小部件(當時處於休眠狀態)併爲其選擇顏色。
該顏色將被添加到該特定窗口小部件的樣式表中。獲取Qt Widget的變量名稱(用於樣式表)?

但是,當程序結束並重新啓動時,我希望特定的小部件保留其樣式表。
我想不必在每個窗口小部件的樣式表中硬編碼。事實上,我甚至不知道哪個特定的窗口小部件有樣式表。

我真的很想做的是爲應用程序提供一個樣式表,並且將新顏色編碼爲單擊的特定窗口部件。

(即:如果用戶點擊了一個QPushButton和選擇的樣式表{顏色:紅},
我想只是QPushButton紅色,沒有其他
所以,如果QPushButton有一個變量名。 「Clicky」,
到QApplications樣式表我想補充:
「QPushButton#Clicky {顏色:紅}」)

要做到這一點,而不必硬編碼在每一個部件,
我必須以某種方式將我的PyQt4小部件的變量名稱轉換爲字符串。
我該怎麼做?

謝謝!

(我讀過它可以是非常困難的,從他們的價值得到Python變量名;
是否有ID爲可以添加到一個樣式的窗口小部件的任何其他形式?)


PyQt4的
蟒蛇2.7.2
Windows 7的

+0

我在QObject.objectName()上一時興奮不已,但到目前爲止,它只是設法讓它工作來檢索子類的小部件的類名(不是實例)。 –

回答

6

您需要首先setObjectName( 「somename」)的對象被命名之前,那麼對象名()將工作,甚至更好 - findChild(),或findChildren( )

頭:

QButton foo; 

類:

foo = new QButton(); 
foo.setObjectName("MySuperButton"); 

然後,終於在你的QSS ..

#MySuperButton { 
    background: black; 
} 

這也適用於類似CSS與

QButton#MySuperButton { 
    background: red; 
} 

爲什麼要類似地設置多個對象名稱(針對不同的對象),或者只使用具有特定名稱的一種類型的窗口小部件的粒度,這與邏輯基本相同。

+0

嗯。Qt Designer會自動執行此操作,我懷疑是否正確? –

+0

設置對象名? .. 我不知道。應該很容易弄清楚。製作一個UI,然後嘗試和qDebug()<< myObject.objectName(); – synthesizerpatel

+1

是的,Qt Designer文件(與uic結合)自動設置對象名稱。 –