关闭小部件时出现嵌入式 Qt GUI 工件
Posted
技术标签:
【中文标题】关闭小部件时出现嵌入式 Qt GUI 工件【英文标题】:Embedded Qt GUI Artifacts Appear when Dismissing Widgets 【发布时间】:2012-09-07 15:43:31 【问题描述】:我正在为嵌入式 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】:以下显然有问题:
QWSServer::instance()->setBackground(QBrush(Qt::NoBrush));
但这解决了问题,我看到 0 个工件:
QWSServer::setBackground(QBrush(QColor(0, 0, 0, 0)));
【讨论】:
以上是关于关闭小部件时出现嵌入式 Qt GUI 工件的主要内容,如果未能解决你的问题,请参考以下文章