我的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,我该怎么做才能将其关闭(或使其透明)?
答案 0 :(得分:1)
绿色背景来自QWSServer。您可以使用QWSServer::setBackground()更改它。
绿色背景的来源仍为Qt,但QWSServer
不再存在。我建议使用全屏QWidget
作为背景。您可以使用包含QWidget
的简单样式表更改为background-color: black;
的背景颜色。
答案 1 :(得分:0)
您没有采取任何措施来正确缩放标签。绿色背景是您的标签不在的地方 - 它可能是帧缓冲区的默认内容。填满整个屏幕,你就不会遇到这个问题。