2009-06-19 116 views
2

有沒有人有Qt中自定義樣式的自定義窗口小部件的經驗? (我使用Qt 4.5)Qt中自定義窗口小部件的自定義樣式

的問題是這樣的:

我想開發未完全基於現有的圖元和子控制一些自定義控件。由於整個應用程序應該是可換膚的,我想依靠自定義樣式,也可以在樣式表上使用。

我需要配置這些新的控件有以下幾種:

  • 其他指標
  • 額外的調色板項
  • 額外的樣式選項

挖掘互聯網和文件上,我發現我需要從一個QStyle子類中派生出一個新的風格類,並且重載用於添加新調色板條目的拋光方法,以及drawControl(和其他繪製方法)用於繪製自定義控件和自定義零件的邏輯。

我有打擾我兩個問題:

  1. 目前,有不同的風格類不同的風格,Qt中已經實施。 (例如,QMotifStyleQWindowsStyle),每個都有不同的設置。通過繼承,我需要重新實現繪畫和每種樣式的附加設置邏輯,以便正確地集成所有這些樣式。我有另一種選擇嗎?

  2. 我仍然對這些自定義樣式如何使用樣式表感到困惑。任何人都可以指向一個可以找到比Qt文檔提供的更多信息的地方嗎? (Qt中的示例對我的幫助不大)。

+1

JFYI,它被寫爲Qt,而不是QT。 – 2009-06-20 08:59:08

回答

2

樣式表問題不會得到解決,因爲它不會在自定義類。

添加到自定義樣式中的額外好吃的東西將不會被現有的類所理解和照顧。這是因爲C++是一種靜態語言,並且沒有(乾淨而健全)的方式來對運行時類進行猴式修補。一個潛在的解決方案是使用包裝標準QStyle子類的特定實例的代理風格。根據你想要達到多少,你可以參考兩篇文章:Cross-platform code and stylesLook 'n' Feel Q & A

如果我是你,我不會採用QStyle方法。最後,您創建自定義小部件(例如FooSomething),以便您可以添加創建完全不同的自定義樣式(例如FooStyle),它甚至不需要模仿QStyle。當然,你仍然需要複製相似的功能,例如支持樣式表。

1
  1. 另一種可能是使用QPalette以獲得正確的色彩和QStyle以獲得正確的間距。

  2. QStyle's documentation Qt的4.5:

    警告:的Qt樣式表目前 不支持自定義將QStyle子類。 我們計劃在未來的某個版本中解決這個問題。

+0

仍然,問題1沒有解決:我想爲新的零件,子控件和自定義控件添加繪畫邏輯,並且我希望不會爲每個樣式子類添加它。 – 2009-06-20 07:35:33