2011-01-09 28 views
5

我想定製QMdiSubWindow的標題欄。 爲此,我使用qss。如何使用qss自定義QMdiSubWindow的標題欄?

QMdiSubWindow { border: 1px solid #000000; background: #000000 } 
QMdiSubWindow:title { background: #000000 } 

問題是,當應用這個qss時,窗口圖標消失。 我知道這是可能的定義在QSS這些圖標的QDockWidget

QDockWidget { ... titlebar-close-icon: url(myCloseIcon.png); ... } 

但是我無法找到一個方法來定義它爲一個QMdiSubWindow。 也許這種方式不存在。 你知道這可能嗎?

+0

這是多年以來的問題。是否有任何解決方法來設置MDI子選項? – cytrinox 2014-12-27 23:26:47

回答

1

截至Qt 5.2你不能;沒有檢查5.3,但AFAIK他們沒有改變QMdiArea/QMdiSubWindow5.3版本中的任何內容。

最簡單的解決方案是使用QCommonStyle並使用QPainter來繪製標題欄。有關更多信息,請參閱QCommonStyleQStyle文檔。請注意,建議您爲您的風格課程派生QCommonStyle而不是QStyleQCommonStyle繼承QStyle所以你不會失去任何東西。

如果你想實現更復雜的效果,如在子窗口陰影,那麼你已經離開了這裏是推導QMdiSubWindowQMdiArea,呼籲QMdiSubWindow派生類QWidget::setWindowFlags(Qt::FramelessWindowHintflag)並從頭開始自己的子窗口實現的唯一選擇與你自己的標題欄。然後,您可以定義自己的Q_PROPERTY s類型QColor,並從QSS訪問類似here的那些,以便從QSS自定義標題欄顏色。

另一種選擇是從零開始創建一個新的MDI區域小部件,但我認爲這不適用於您的情況。如果您只需要使用自定義樣式自定義標題欄,那麼您就可以解決這個問題。如果遇到麻煩,可以提供這個帖子的編輯。

但是,如果您想使用QSS自定義標準QMdiSubWindow,不幸的是,目前它不可能。

+1

似乎是一個很好的解決方案,謝謝。 – cytrinox 2014-12-30 23:54:15