要使得自己的QT应用程序能够分层透明,把下面层的视频显示出来要分四步。
1、将你的QT应用放到靠上的FB层。从底层到上层的顺序是FB0,FB1..FB4,
这样你可以把QT应用程序放到FB4,把你的视频显示放到FB0或者其他都行。
对于三星tiny4412开发板,可以到/bin/setqt4env 文件中进行修改,调整QT程序显示的FB层。
echo "set QWS_DISPLAY"
#export QWS_DISPLAY=:1
export QWS_DISPLAY=LinuxFb:/dev/fb4
#export QWS_DISPLAY=LinuxFb:/dev/fb0
(仅针对SX4412注意:setqt4env是在/bin/qt4脚本中调用的,在qt4中要用source /bin/setqt4env
然后在qt4脚本中接下来就可以启动诸如视频显示程序和qt应用程序,只要source才能立即生效。否则无法达到调整显示层的目的。)
2、使得你的各个FB层透明,需要直接操作Frambuffer,就是依次把这几个FB层的都赋值刷成透明的。
刷Frambuffer可以参考我这个帖子14楼的代码:
http://bbs.csdn.net/topics/390849603
3、使得QWS服务器的背景透明,默认是绿色的。刷QWS服务器背景的话可以在QT程序中使用以下代码:
QWSServer::setBackground(QColor(0,0,0,0));
4、使得QT应用程序的背景透明,可以采用两种方法:
(1)使用一张透明的图片做背景。。
setAutoFillBackground(true);
QPalette palette;
QPixmap pixmap;
pixmap.load(":/etc/images/view1"); //view1是一张背景透明的图片
QPixmap newmp = pixmap.scaled(gSize, Qt::IgnoreAspectRatio);
palette.setBrush(QPalette::Background, QBrush(newmp));
setPalette(palette);
(2)使用调色板把背景设置成透明。
QPalette pal = palette();
pal.setColor(QPalette::Background, QColor(0x00,0x00,0x00,0x00));
setPalette(pal);
总结:
经过以上几个步骤,如果你现在写了两个程序一个QT界面程序,一个视频显示程序,你就可以在两个FB层中分别显示他们,将视频显示程序放到下层FB,QT界面放到上层FB,这时
候QT界面就相当于视频的OSD,可以透过QT界面看到底下的视频。