1

我正在为嵌入式 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

如果我关闭这条线,我看不到底层覆盖,但我也没有任何奇怪的行为,我的表现变得更好。我怎样才能实现透明但又失去了奇怪的文物?

4

1 回答 1

0

那么以下显然有一个问题:

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

但这解决了问题,我看到 0 个工件:

QWSServer::setBackground(QBrush(QColor(0, 0, 0, 0)));
于 2012-09-07T20:14:03.370 回答