gpt4 book ai didi

c++ - QGraphicsScene 在 QGraphicsView 中奇怪地缩放

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

我正在使用 QGraphicsViewQGraphicsScene 来创建井字游戏克隆。我在我的场景中添加了一些 QGraphicsLineItem 并覆盖了包含 View 的 Widget 的 resizeEvent 方法,这样当窗口被调整大小时, View 及其内容被缩放适本地。这工作正常,除了我第一次运行该程序:

Incorrect scaling

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

Correct scaling

代码如下:

ma​​in.cpp:

#include <QtGui>

#include "TestApp.h"

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

TestApp window;
window.show();

return app.exec();
}

TestApp.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

TestApp.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);
}

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

干杯。

最佳答案

在 showEvent 中处理适合的 View :

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

关于c++ - QGraphicsScene 在 QGraphicsView 中奇怪地缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9858971/

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