2013-07-23 64 views
0
MyDialog::MyDialog(QWidget* parent, Qt::WindowFlags f) 
    : QWidget(parent, Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint)  
    , _pixmap(new QPixmap(myPngFile)) 
{ 
    QPalette palette; 
    palette.setBrush(this->backgroundRole(), QBrush(*_pixmap)); 
    this->setPalette(palette); 

    setFixedSize(_pixmap->size()); 
} 

myPngFile定義png路徑。問題是當我顯示MyDialog時,png文件中的透明部分顯示爲黑色,我如何糾正它以加載myPngFile?如何用指定的png文件製作QWidget背景?

我使用Windows平臺與Qt4.8

請不要使用樣式表。

+2

爲什麼不使用樣式表? – 2013-07-23 08:16:28

回答

0

如果你真的不想使用樣式表,您的問題可以通過這個計算器問題的答案覆蓋你MyDialog類的Paint事件像解決: Background image not showing on QWidget

不過我也建議使用你的問題樣式表。

+0

謝謝,我重新繪製並解決問題。正因爲這是非常普遍的要求,所以Qt需要重新繪製它來解決。 – CCC

1

使用

setAttribute(Qt::WA_TranslucentBackground); 

看看this:

明確:

QPixmap aPixmap(":/splash.png"); 
QLabel* aWidget = new QLabel(0, Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint); 
aWidget->setAttribute(Qt::WA_TranslucentBackground); 
aWidget->setPixmap(aPixmap); 
aWidget->show(); 

而且docs

創建半透明窗口由於Qt的4.5,它已經可能到 創建窗口與窗口系統上的半透明區域,支持 合成。要在頂層窗口小部件中啓用此功能,請使用setAttribute()將其設置爲 Qt :: WA_TranslucentBackground屬性,並確保 其背景在您想要部分透明的區域 中使用非透明顏色塗色。

平臺說明: X11:此 功能依賴於使用支持ARGB視覺效果 和複合窗口管理器的X服務器。 窗口:該窗口小部件需要有 的Qt :: FramelessWindowHint窗口標誌設置爲半透明 工作。

(你已經這樣做了這個大膽的一部分,但對於未來來者不拒更好地使其可見)

+0

我使用它,它會使整個小部件透明。無論如何,謝謝 – CCC

0

我不明白爲什麼你不希望使用stylesheets因爲這樣它的首選方式。使用的QWidget

setStyleSheet("background-image: url(:/images/pixmap.png);"); 

pixmap.png將設在images前綴下的資源文件的方法setStylesheet。欲瞭解更多詳情,請檢查Qt stylesheet examples

+0

因爲我需要深度定製小部件。 – CCC