Политика полосы прокрутки QGraphicsView не работает должным образом

У меня есть QGraphicsView с политикой вертикальной полосы прокрутки "ScrollBarAlwaysOff". Проблема в том, что когда я настраиваю размер представления (с помощью 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();
}

Вот как выглядит проблема:

изображение проблемы

Как я могу это исправить?

РЕДАКТИРОВАТЬ: Нажмите здесь, чтобы увеличить изображение: https://i.stack.imgur.com/HeWHJ.png


person Anthony    schedule 16.04.2012    source источник
comment
К сожалению, я не могу воспроизвести это поведение в PyQt. Использование PyQt 4.9.1 и Qt 4.8.1. Для меня я получаю постоянный черный цвет, когда он меньше размера QGraphicsItem. И, очевидно, красный, когда он больше, чем размер QGraphicItem   -  person jdi    schedule 16.04.2012
comment
@jdi Я ценю, что ты проверил это. Я использую 4.8.0. Я обновлюсь до 4.8.1 и посмотрю, исправит ли это проблему.   -  person Anthony    schedule 17.04.2012


Ответы (1)


Я попробовал и обнаружил, что если вы измените свой прямоугольник на (0, 0, 300, 300), он будет работать как нужно. Кажется, QGraphicsView имеет проблемы с обработкой обновления полосы прокрутки с отрицательным прямоугольником сцены в верхнем левом углу. Вы должны подать отчет об ошибке в Qt.

person Stephen Chu    schedule 16.04.2012
comment
На какой версии Qt вы это тестировали? Я вообще не видел этой проблемы в 4.8.1 - person jdi; 17.04.2012
comment
Это исправит это для меня. Очень странно. Как упоминал @jdi, это может быть проблема с версией. Я сообщу об этом как об ошибке (и здесь), если она останется после обновления. - person Anthony; 17.04.2012
comment
да. Сейчас это альфа версии 4.8.1 и 5.0. По крайней мере, на привязке C++. - person Stephen Chu; 17.04.2012
comment
Я предполагаю, что привязки python каким-то образом решают проблему. Странно, хотя, поскольку он все еще использует тот же С++ внизу - person jdi; 17.04.2012