解除小部件时出现嵌入式Qt GUI工件

时间:2012-09-07 15:43:32

标签: qt user-interface transparency embedded-linux qwidget

我正在研究嵌入式Linux设备的触摸屏GUI,它将位于视频源上。因此,我需要我的GUI透明并在超时后消失,以便用户只能查看视频源。我的GUI的main.cpp确保使用-qws选项运行的整个应用程序的背景是透明的,并带有以下代码:

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,我可以通过触摸进行交互,在GUI中调出不同的窗口并让它们消失。

我无法完成的是摆脱当我点击“取消”或命令GUI的某些部分消失时留下的文物。这些工件看起来非常难看(多条垂直线/错误的颜色),只有当召唤GUI的另一部分替换屏幕上的那个位置时才会消失。无论我是否启用了视频输入(它都位于处理器dss控制的不同叠加层上),它们都在那里。

如何摆脱解雇某些小部件后留下的这些文物?

注意:这绝对与以下行相关:

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

如果我关掉这条线,我看不到底层的叠加,但我也没有任何奇怪的行为,我的表现变得更好。如何实现透明度,同时又失去了奇怪的文物?

1 个答案:

答案 0 :(得分:0)

以下显然存在问题:

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

但是这解决了问题,我看到了0个文物:

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