2
votes

I'm trying to write a map editor in Qt, using QGraphicsView and QGraphicsScene for both the map and tile sheets.

The problem I'm having right now is with making a good widget for importing tiles. For this, I'm using a QTabWidget (for different tile sheets), and TileWidget as the widget for each tab, which contains the QGraphicsScene and QGraphicsView.

It's working to a rough degree, but not all the tiles (or TileObjects, which are implementations of QGraphicsItem) are visible. I'm even calling view->ensureVisible(scene->sceneRect()), but still not all of the QGraphicsScene is not visible, even with scroll bars.

I understand this is due to limiting the maximum size of my QTabWidget, but that is necessary.

This happens mainly when I import a larger tile sheet.

I have a TileWidget as the QWidget for the QTabWidget, which has both the QGraphicsScene and the QGraphicsView.

TileWidget::TileWidget(QWidget *parent)
 : QWidget(parent)
{
    scene = new QGraphicsScene;
    view = new TileView(scene, this);

    connect(view, SIGNAL(newBrushSelected(TileObject *b)), this, SLOT(selectNewBrush(TileObject *b)));
}

TileView is simply a QGraphicsView re-implemented to handle mouse release events.

To add tiles, I simply call scene->addItem().

I have no other code for TileView. When I use

void TileWidget::showEvent(QShowEvent *event)
{
    view->fitInView(scene->itemsBoundingRect(), Qt::KeepAspectRatio);
}

I get something like this.

enter image description here

It's okay for smaller tile sheets, but not for larger ones. What should I add to keep the size of the tiles normal, and navigate TileView using scroll bars?

Nevermind, figured it out. Just me being stupid.

1

1 Answers

3
votes

You need something like:

p_myGraphicsView->fitInView(
    myGraphicsView->scene()->itemsBoundingRect(),
    Qt::KeepAspectRatio);