我正在爲一個嵌入式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與以下行相關更好。我怎樣才能實現透明度,但也失去了奇怪的文物?