【问题标题】:QGraphicsView scroll bar policy not working as expectedQGraphicsView 滚动条策略未按预期工作
【发布时间】:2012-04-16 17:55:19
【问题描述】:

我有一个垂直滚动条策略为“ScrollBarAlwaysOff”的 QGraphicsView。问题是当我调整视图的大小时(通过 QSplitter 或仅通过调整窗口的大小),视图的右侧经常会出现一个空白区域。这是一个带有红色背景和黑色 QGraphicsRectItem 的示例:

#include <QtGui>

class MainWindow : public QMainWindow
{
public:
    MainWindow()
    {
        QGraphicsScene *scene = new QGraphicsScene(this);
        QRectF rect(-100, -100, 200, 200);
        QGraphicsRectItem *rectItem = new QGraphicsRectItem(rect);
        rectItem->setBrush(QBrush(Qt::black));
        scene->addItem(rectItem);
        scene->setSceneRect(rect); //commenting this out doesn't make a difference

        QGraphicsView *view = new QGraphicsView(this);
        view->setBackgroundBrush(QBrush(Qt::red));
        view->setTransformationAnchor(QGraphicsView::AnchorViewCenter);
        view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
        view->setScene(scene);

        setCentralWidget(view);
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

问题如下:

我该如何解决这个问题?

编辑:点击这里将图片放大一点:http://i.stack.imgur.com/HeWHJ.png

【问题讨论】:

  • 不幸的是,我无法在 PyQt 中重现这种行为。使用 PyQt 4.9.1 和 Qt 4.8.1。对我来说,当它小于 QGraphicsItem 大小时,我会得到恒定的黑色。显然,当它大于 QGraphicItem 大小时是红色
  • @jdi 感谢您检查它。我正在使用 4.8.0。我会更新到 4.8.1 看看能不能解决。

标签: qt qgraphicsview


【解决方案1】:

我试了一下,发现如果将矩形更改为 (0, 0, 300, 300),它可以正常工作。似乎QGraphicsView 在处理带有负左上场景矩形的滚动条更新时遇到问题。您应该向 Qt 提交错误报告。

【讨论】:

  • 你在哪个版本的 Qt 上测试过这个?我在 4.8.1 中根本没有看到这个问题
  • 这确实为我解决了问题。很奇怪。正如@jdi 提到的,这可能是版本问题。如果我更新后它仍然存在,我会将其报告为错误(并在此处)。
  • 是的。它现在处于 4.8.1 和 5.0 alpha 版本中。至少在 C++ 绑定上。
  • 我猜python绑定以某种方式解决了这个问题。奇怪的是,它仍然在下面使用相同的 c++
猜你喜欢
  • 2019-07-30
  • 2021-07-09
  • 2020-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 2017-05-28
相关资源
最近更新 更多