4

我正在搞乱QGraphicsViewQGraphicsScene创建一个井字游戏克隆。我在我的场景中添加了一些QGraphicsLineItems 并覆盖了resizeEvent包含视图的 Widget 的方法,这样当窗口调整大小时,视图及其内容都会适当地缩放。这工作正常,除了我第一次运行程序:

不正确的缩放比例

一旦我按任意数量调整窗口大小,场景就会正确缩放:

正确缩放

这是代码:

主.cpp:

#include <QtGui>

#include "TestApp.h"

int main(int argv, char **args)
{
    QApplication app(argv, args);

    TestApp window;
    window.show();

    return app.exec();
}

测试应用程序.h:

#ifndef TEST_APP_H
#define TEST_APP_H

#include <QtGui>

class TestApp : public QMainWindow
{
    Q_OBJECT
public:
    TestApp();
protected:
    void resizeEvent(QResizeEvent* event);

    QGraphicsView* view;
    QGraphicsScene* scene;
};

#endif

测试应用程序.cpp:

#include "TestApp.h"

TestApp::TestApp()
: view(new QGraphicsView(this))
, scene(new QGraphicsScene(this))
{
    resize(220, 220);
    scene->setSceneRect(0, 0, 200, 200);

    const int BOARD_WIDTH = 3;
    const int BOARD_HEIGHT = 3;
    const QPoint SQUARE_SIZE = QPoint(66, 66);

    const int LINE_WIDTH = 10;
    const int HALF_LINE_WIDTH = LINE_WIDTH / 2;
    QBrush lineBrush = QBrush(Qt::black);
    QPen linePen = QPen(lineBrush, LINE_WIDTH);

    for(int x = 1; x < BOARD_WIDTH; ++x)
    {
        int x1 = x * SQUARE_SIZE.x();
        scene->addLine(x1, HALF_LINE_WIDTH, x1, scene->height() - HALF_LINE_WIDTH, linePen);
    }
    for(int y = 1; y < BOARD_HEIGHT; ++y)
    {
        int y1 = y * SQUARE_SIZE.y();
        scene->addLine(HALF_LINE_WIDTH, y1, scene->width() - HALF_LINE_WIDTH, y1, linePen);
    }

    view->setScene(scene);
    view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    view->show();
    view->installEventFilter(this);

    setCentralWidget(view);
}

void TestApp::resizeEvent(QResizeEvent* event)
{
    view->fitInView(0, 0, scene->width(), scene->height());
    QWidget::resizeEvent(event);
}

我尝试在 's 构造函数fitInView的末尾添加一个调用TestApp,但它似乎没有做任何事情 -resizeEvent无论如何似乎在程序执行开始时被调用一次。

干杯。

4

1 回答 1

8

也可以在 showEvent 中处理适合的视图:

void TestApp::showEvent ( QShowEvent * event )
{
    view->fitInView(0, 0, scene->width(), scene->height());
    QWidget::showEvent(event);
}
于 2012-03-25T09:59:34.230 回答