2011-10-19 80 views
3

如何設置矩形/屏幕的透明度。QML:矩形的透明度不起作用

我有下面的代碼:

// main.cpp 
void main(int argc, char*[] argv) 
{ 
    QApplication::setGraphicsSystem("raster"); 
    QApplication app(argc, argv); 

    QDeclerativeView view; 
    view.setSource(QUrl::fromLocalFile("loaderTest.qml")); 

    view.setResizeMode(QDeclarativeView::SizeRootObjectToView); 
    view.showFullScreen(); 

    //QRegion mask(10, 10, 100, 100); 
    //view.setMask(); 

    view.show(); 
    app.exec(); 
} 

而且QML文件是:

//loaderTest.qml 
Rectangle 
{ 
    id: mainRectangle 
    width: 1000 
    height: 700 
    color: "transparent" 
    //color: "#00000000" 

    Image 
    { 
     id: image1; 
     width: 348; 
     height: 155; 
     anchors.horizontalCenter: parent.horizontalCenter; 
     anchors.verticalCenter: parent.verticalCenter; 
     source: "test.png" 
    } 

    Loader 
    { 
     id: mainLoader 
     anchors.fill: parent; 
     source: ""; 
     focus: true; 
    } 
} 

我在這個屏幕上一個裝載機和一個圖像和背景顏色是透明的。 當我運行這個應用程序時,它應該顯示透明背景與圖像在中心(因爲我還沒有設置加載器源)。

但我得到的是在屏幕中填充白色背景的中心圖像,我不知道是誰填充了這種白色背景顏色,因爲我已經提到透明顏色作爲背景。

我正在使用QT.4.7.0和Linux。

我的目標系統上有兩架飛機,一架是視頻平面,另一架是圖形平面,當我運行帶有透明背景的GUI(在視頻位置設置透明度)時,它應該在視頻位置上顯示視頻,爲白色,因爲它應該顯示在視頻平面上播放的視頻。

回答

3

默認情況下,QDeclarativeView繪製背景。也許這是你的情況的問題。

http://doc.qt.nokia.com/4.7/qdeclarativeperformance.html

您還可以防止QDeclarativeView從繪畫的窗口背景,如果你會提供您的應用程序的使用QML,例如背景

QDeclarativeView window; 
window.setAttribute(Qt::WA_OpaquePaintEvent); 
window.setAttribute(Qt::WA_NoSystemBackground); 
window.viewport()->setAttribute(Qt::WA_OpaquePaintEvent); 
window.viewport()->setAttribute(Qt::WA_NoSystemBackground); 
0

我的第一個猜測是背景是白色的,你的矩形確實是完全透明的。

LoaderScreen是什麼類型,我猜它是某種QDecalarativeView,請原諒任何技術上的缺失,近一年沒有編碼Qt/QML。正如我記得它的默認背景是白色的,你希望達到什麼樣的透明度呢?

+0

對不起,這是QDecalarativeView。我編輯了這個問題。 – kbalar

+0

是LoaderScreen是從QDecalarativeView派生的,我需要完全透明。 - Kbalar – User7723337

0

如果只設置一個QPushButton背景顏色,背景可能不會出現,除非你border屬性設置爲某個值。這是因爲,默認情況下,QPushButton繪製一個完全重疊背景色的原生邊框。 這可能會在QPushButton周圍顯示一個黑色的矩形框。尤其是在Linux機器上,您將面臨這個問題。爲了避免這種情況,你可以設置邊框屬性爲無。

widget-> setStyleSheet(「border:none」);