2012-09-07 29 views
1

我正在爲一個嵌入式Linux設備的觸摸屏GUI工作,該工具將坐在視頻源上。因此,我需要我的GUI透明並在一段時間後消失,以便用戶可以查看視頻源。我的GUI的main.cpp中要保證與-qws選項運行整個應用程序的背景是透明的,下面的代碼:嵌入式Qt GUI工件在關閉窗口時出現

QApplication a(argc, argv, QApplication::GuiServer); 
QWSServer::instance()->setBackground(QBrush(Qt::NoBrush)); 
QWSServer::setCursorVisible (false); 

我擁有的所有其他窗口小部件的主,底層部件GUI。我使用以下與托盤相關的代碼將背景設置爲透明。

QPalette transparentPallete; 
transparentPallete.setColor(QPalette::Window, Qt::transparent); 
setAutoFillBackground(true); 
setPalette(transparentPallete); 

我也推翻了的paintEvent方法,以儘量確保背景將永遠是一個乾淨透明的狀態:

void MainWidget::paintEvent(QPaintEvent *event) 
{ 
    QPainter p(this); 

    // Fill background 
    p.setPen(Qt::NoPen); // no outlines 
    p.fillRect(0,0,width(),height(),QColor(255, 255, 255, 0)); // Fill rectangle with color 

} 

現在,我可以啓動我的應用程序並查看我的GUI比原始視頻Feed,我可以通過觸摸進行交互,以在GUI中調出不同的窗口並讓它們消失。

我無法完成的是擺脫當我點擊'取消'或命令GUI的某些部分消失時留下的工件。這些工件看起來非常醜陋(多條垂直線/錯誤的顏色),並且只有在GUI的另一部分被調用以取代屏幕上的位置時纔會消失。無論我是否啓用了視頻供稿(無論如何,它們位於由處理器dss控制的不同疊加層上),他們都在那裏。

如何擺脫這些在解散某些小部件後留下的工件?

注:

QWSServer::instance()->setBackground(QBrush(Qt::NoBrush)); // Allows transparent pixels to be written to frame buffer 

如果我把這個線了,我看不到底層的覆蓋,但我還沒有得到任何奇怪的行爲,無論如何,我的表現變得更:這definetly與以下行相關更好。我怎樣才能實現透明度,但也失去了奇怪的文物?

回答

0

那麼下面有明顯的問題:

QWSServer::instance()->setBackground(QBrush(Qt::NoBrush)); 

但這個問題解決了,我看到0文物:

QWSServer::setBackground(QBrush(QColor(0, 0, 0, 0)));