QGraphicsView 滚动条策略未按预期工作

Posted

技术标签:

【中文标题】QGraphicsView 滚动条策略未按预期工作【英文标题】:QGraphicsView scroll bar policy not working as expected 【发布时间】: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 看看能不能解决。 【参考方案1】:

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

【讨论】:

你在哪个版本的 Qt 上测试过这个?我在 4.8.1 中根本没有看到这个问题 这确实为我解决了问题。很奇怪。正如@jdi 提到的,这可能是版本问题。如果我更新后它仍然存在,我会将其报告为错误(并在此处)。 是的。它现在处于 4.8.1 和 5.0 alpha 版本中。至少在 C++ 绑定上。 我猜python绑定以某种方式解决了这个问题。奇怪的是,它仍然在下面使用相同的 c++

以上是关于QGraphicsView 滚动条策略未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

UIScroll 视图未按预期工作

UICompositionalLayout 未按预期工作(垂直表格滚动 + 水平分页)

ReactiveCocoa - concat flatten 策略未按预期工作

MySQL ResultSet 可滚动/可更新未按预期工作

CSS 溢出未按预期工作,无法滚动到 div 底部

Azure API 管理集状态代码策略未按预期工作