4
저는 Tic Tac Toe 복제본을 만들기 위해 QGraphicsView
과 QGraphicsScene
으로 장난하고 있습니다. 내 장면에 QGraphicsLineItem
을 추가하고보기가 포함 된 위젯의 resizeEvent
메서드를 재정 의하여 창 크기를 조정하면보기 및 해당 내용의 크기가 적절하게 조정됩니다. 이것은 내가 프로그램 실행이 처음을 제외하고 잘 작동 : 내가 어떤 양만큼 창 크기를 조정하면QGraphicsScene은 QGraphicsView에서 이상하게 확장되었습니다.
을, 장면이 올바르게 조정됩니다 :
은 여기입니다 코드 :
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
죄송합니다. 장면 rect를 명시 적으로 설정하지 않았습니다. 나는 나의 대답을 업데이트했다. – Masci
감사합니다. 훌륭한 작품입니다. :) – Mitch