gpt4 book ai didi

c++ - 带有滚动条的 QGraphicsView 内不需要的边距

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:47 24 4
gpt4 key购买 nike

我正在开发一个视频播放器,使用 QGraphicsView 来显示视频。 QGraphicsView 正在显示一个 QGraphicsScene,其中包含一个包含当前视频帧的 QGraphicsPixmapItem。 View 的背景是黑色的。

只要帧小于 View ,一切都好,视频帧显示在 View 的中心, View 的其余部分是黑色的。当 View 与框架大小相同时,仅显示框架,(显然)没有背景。当视频帧大于 View 时,会显示滚动条,以便用户可以滚动查看帧的其他部分。

问题:显示滚动条时,可能会滚动到视频帧之外。在背景可见的底部和右侧有 8 像素的边距。如果视频帧大于 View ,则不应有可见的背景,并且不应滚动超过视频帧。

我将问题简化为演示问题的简短源代码,在具有绿色背景的 QGraphicsView 中显示 200x200 像素的红色 QPixmap

#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 与矩形大小相同,在右侧窗口中它略小一些,因此显示了滚动条。而且背景是可见的(它不应该是可见的)。

我已经尝试设置 QWidgetQGraphicsViewQGraphicsScene 的 sceneRect 和各种其他属性,但没有发现任何改变问题的地方。

我还尝试在虚拟机中运行示例问题,以排除我的 Qt/KDE 版本存在错误的可能性。

我不知道为什么有滚动条时突然显示背景。我怎样才能摆脱它?如果那不可能,您知道我该如何解决吗?

提前致谢。

最佳答案

问题是他们不关心的 QGraphicsView::fitInView() 的错误:https://bugreports.qt.io/browse/QTBUG-11945

无需重新实现您自己的 fitInView,只需在创建 View 时移除 View 的边距即可。

view.setViewportMargins(-2, -2, -2, -2)
view.setFrameStyle(QFrame.NoFrame)

关于c++ - 带有滚动条的 QGraphicsView 内不需要的边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17223547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com