2011-08-09 120 views
3

我想刪除我的QListView的背景,以便可以看到下面的背景。我怎樣才能做到這一點?刪除QListView背景

我試過setAttribute(Qt::WA_NoSystemBackground)setAttribute(Qt::WA_NoBackground)但是這並沒有改變任何東西。另外,我不能覆蓋paintEvent(),否則它不繪製項目。

有什麼想法?

回答

6

不要忘記,QListView的基類QScrollArea包含稱爲Viewport的「另一個」小部件。它可以通過viewport()方法加以識別。

爲了實現透明,您可以簡單地只需撥打:

viewport()->setAutoFillBackground(false);

,並取決於其他設置(即父窗口小部件設置)你應該看到的背景。

1

答案取決於您的QListView是否是頂級窗口小部件。 QWidget docs on transparency詳細解釋。

view->setWindowOpacity(50); 

對於一個小部件,這不是頂層,你要的背景設定爲一個帶有alpha通道:對於一個頂級窗口部件,因爲它可能是簡單

QPalette palette = view->palette(); 
palette.setColor(QPalette::Background, Qt::transparent); 
view->setPalette(palette); 

你還應該能夠做同樣的事情用樣式表:

view->setStyleSheet("background-color: transparent;"); 

您可能需要設置autoFillBackground爲false,這樣的小部件不會在後臺自動填充。

+0

非常感謝所有這些建議,我嘗試了所有這些。因此,在嘗試了'setAttribute(Qt :: WA_NoSystemBackground)','setAttribute(Qt :: WA_NoBackground)','view-> setPalette(palette)','setAutoFillBackground(false)'後,我嘗試了'view-> setStyleSheet(「background-color:transparent;」)'工作! –