3

QGraphicsViewウィンドウの中央に高さと同じ幅を配置しようとしています。

私はQt Designerで普通のものを作成し、最小サイズを設定し、メインウィンドウの中央に配置し、高さと同じ幅を設定するQGraphicsViewいくつかの計算を追加しました。QGraphicsViewのみを使用しsetGeometryます。QGraphicsScene非常に長い長方形を 1 つだけ作成しました。グラフィック シーンを表示に合わせたいので、 を使用しQGraphicsView::fitInViewました。すべて正常に動作しますが、ウィンドウのサイズ変更に問題がありました。

ウィンドウの高さと幅を大きくすると、すべて正常に動作します。のQGraphicsView位置とサイズが新しくなりました。ウィンドウのサイズの一部だけを縮小しても、すべて正常に動作します。しかし(最終的に)ウィンドウのサイズを可能な限り小さくすると、すべてが壊れます。ビューの四角形の幅は適切です (サイズ変更なしと同じです。定規で測定しました:))が、新しい余白が作成され、QGraphicsView配置もサイズも正しくありません(したがって、余白だけでなく、効果がない場合もありsetGeometryます)。

QGraphicsView::fitInViewを使用する前に呼び出すと、同じことが起こることに気付きましたsetGeometry

それは私を夢中にさせています、助けてください!

ここにいくつかのコードがあります:

void MainWindow::resizeEvent(QResizeEvent *e)
{
    int h = e->size().height(),
        w = e->size().width(),
        s;

    if(w > h) s = h-120;
    else s = w-120;

    ui->board->setGeometry((w-s)/2,(h-s)/2,s,s);

    int scaleWidth = ui->board->scene()->width(),
        scaleHeight = ui->board->scene()->height();

    ui->board->fitInView(QRectF(0, 0, scaleWidth, scaleHeight), Qt::KeepAspectRatio);

}

に何が起こるかのイメージを次にQGraphicsView示します。四角形は赤、ビューは青です。

これで結構です これは壊れています

4

2 に答える 2

10

を使用しようとしてQGraphicsView::fitInViewQt::KeepAspectRatio,て、同様の問題が発生していました。
この回答が役に立ちました:

QGraphicsView をシーンの特別なポイントに固定する方法は?

重要なのは、シーンの境界矩形を手動で設定することです。次のコードは私のために働いた:

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // Set up graphics view
    scene = new QGraphicsScene(this);
    drawMyWidget();
    scene->setSceneRect(-1.25, -1.25, 2.5, 2.5);    // your scene's bounding rect here...
    ui->graphicsView->setScene(scene);
    ui->graphicsView->show();
}

void MainWindow::resizeEvent(QResizeEvent *) {
    QRectF bounds = scene->itemsBoundingRect();
    bounds.setWidth(bounds.width()*0.9);         // to tighten-up margins
    bounds.setHeight(bounds.height()*0.9);       // same as above
    ui->graphicsView->fitInView(bounds, Qt::KeepAspectRatio);
    ui->graphicsView->centerOn(0, 0);
}
于 2013-09-07T10:04:17.690 に答える