我正在开发一个视频播放器,使用 aQGraphicsView
来显示视频。QGraphicsView
正在显示一个包含当前视频帧的QGraphicsScene
单个。QGraphicsPixmapItem
视图的背景是黑色的。
只要帧小于视图,一切都好,视频帧显示在视图的中心,视图的其余部分是黑色的。当视图与框架大小相同时,仅显示框架,(显然)没有背景。当视频帧大于视图时,会显示滚动条,以便用户可以滚动查看帧的其他部分。
问题:当显示滚动条时,可以滚动超过视频帧。背景可见的底部和右侧有 8 个像素的边距。如果视频帧大于视图,则不应有可见的背景,并且不应滚动超过视频帧。
我将问题简化为演示问题的简短源代码,QPixmap
在QGraphicsView
绿色背景中显示 200x200 像素的红色。
#include <QtGui/QApplication>
#include <QMainWindow>
#include <QGraphicsScene>
#include <QGraphicsView>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QMainWindow window;
QPixmap pixmap(200, 200);
pixmap.fill(QColor(255, 0, 0));
QGraphicsScene scene(&window);
scene.addPixmap(pixmap);
QGraphicsView view(&window);
view.setBackgroundBrush(QColor(0, 255, 0));
view.setScene(&scene);
window.setCentralWidget(&view);
window.show();
window.resize(199, 199);
return app.exec();
}
我还制作了问题的图像(示例代码中不包含黑色边框):http: //imgur.com/4X5eyhC
在左侧窗口中,QGraphicsView
与矩形的大小相同,在右侧窗口中它稍微小一些,因此显示了滚动条。而且背景是可见的(它不应该是可见的)。
我已经尝试设置 sceneRect 和其他各种属性,QWidget
但没有发现任何改变问题的任何东西。QGraphicsView
QGraphicsScene
我还尝试在虚拟机中运行示例问题,以排除我的 Qt/KDE 版本存在错误的可能性。
我不知道为什么有滚动条时会突然显示背景。我怎样才能摆脱它?如果这是不可能的,你知道我该如何解决这个问题吗?
提前致谢。