4
我在搞QGraphicsView
和QGraphicsScene
來創建一個Tic Tac Toe克隆。我將一些QGraphicsLineItem
s添加到我的場景中,並覆蓋包含該視圖的Widget的resizeEvent
方法,以便在調整窗口大小時適當縮放視圖及其內容。這工作得很好,除了我第一次運行該程序:QGraphicsScene在QGraphics中縮放很奇怪查看
一旦我調整任何數量的窗口,現場正確縮放:
這裏的代碼:
main.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
似乎在程序執行開始時被調用一次。
乾杯。
嗨Masci。我嘗試用這個替換構造函數中的調用,但沒有任何更改。在每次調用'fitInView'之前,場景的寬度和高度都是200。我嘗試用上面的代碼替換'resizeEvent'中'fitInView'的調用,唯一的區別是網格具有正確的比例:[http://i.imgur.com/JI2pg.png](http ://i.imgur.com/JI2pg.png) – Mitch 2012-03-25 10:21:06
對不起,我沒有注意到你明確設置了場景矩形。我更新了我的答案。 – Masci 2012-03-25 11:05:19
謝謝,效果很好。 :) – Mitch 2012-03-25 11:46:35