问:为什么我的图像背景在LinuxFb上是绿色的?

时间:2017-05-16 21:37:24

标签: c++ qt embedded-linux framebuffer

我的Qt应用程序应该将JPEG图像显示到HDMI监视器。当我在Linux桌面环境中运行应用程序时,图像显示正确。

但是,当我在LinuxFB下的嵌入式Linux环境中运行此应用程序时,图像周围会有大量的绿色。

我的1080p显示器上的NTSC(720x480)彩条。

我的应用程序是用QLabel而不是QWidget编写的,没有任何活动窗口。我尝试了很多解决方案,主要是使用QPainter,但到目前为止,没有什么能够对背景外观产生影响。

int main (int argc, char *argv[])
{
    QApplication app(argc, argv);

    // Set the app palette to be transparent
    app.setPalette(QPalette(Qt::transparent));

    QPixmap input ("test.jpg");
    QImage image(input.size(), QImage::Format_ARGB32_Premultiplied);

    // Try to fill the QImage to be transparent
    image.fill(Qt::transparent);

    QPainter p(&image);

    // Try a few things to get the painter background to be transparent
    p.setOpacity(0.5);  // 0 is invisible, 1 is opaque
    p.setBackgroundMode(Qt::TransparentMode);
    p.setBackground(Qt::transparent);
    p.setBrush(Qt::transparent);

    p.drawPixmap(0,0,input);
    p.end();
    QPixmap output = QPixmap::fromImage(image);

    QLabel label (0, Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);

    // Set the style sheet background color as transparent as well
    label.setStyleSheet("background-color: transparent;");
    //label.setStyleSheet("background-color: rgba(255,255,255,0);");

    label.setPixmap(output);
    label.setScaledContents(true);
    label.show();

    return app.exec();
}

使用以下

执行应用程序
./my-Qt-application -qws -nomouse -display LinuxFb:/dev/fb1

我不相信这与Linux帧缓冲区本身有任何关系,因为绿色背景仅在我运行Qt应用程序时才存在。

假设绿色背景来自Qt,我该怎么做才能将其关闭(或使其透明)?

2 个答案:

答案 0 :(得分:1)

Qt 4.8(可能是4.x)

绿色背景来自QWSServer。您可以使用QWSServer::setBackground()更改它。

Qt 5.x

绿色背景的来源仍为Qt,但QWSServer不再存在。我建议使用全屏QWidget作为背景。您可以使用包含QWidget的简单样式表更改为background-color: black;的背景颜色。

答案 1 :(得分:0)

您没有采取任何措施来正确缩放标签。绿色背景是您的标签不在的地方 - 它可能是帧缓冲区的默认内容。填满整个屏幕,你就不会遇到这个问题。