1

シンプルな 32x32 スプライトを描画するために opengl を使用して 2D マップ エディターを作成していますが、QGLWidget を大きなサイズ (つまり、サイズ * スプライト サイズ -> 1024 * 32) にサイズ変更できないようです。 ->setMinimumSize(...))。私はこれについてしばらくグーグルで調べてきましたが、私が見つけた唯一の興味深いことは、QAbstractScrollArea をサブクラス化し、QGLWidget をビューポートとして設定することです (これが QGraphicsView の機能です)。また、すべての Qt opengl の例を見ましたが、助けになる可能性があります(正確には私が望むものではないImage Viewerの例を除く)、次のことも試しました: horizontalScrollBar()->setMaximum(width * 32); verticalScrollBar()->setMaximum(height * 32); スクロールエリアでサイズ変更可能なウィジェットをtrue / falseに設定しましたが、それでも何もしませんでした。どうすればそれを行うことができますか?あなたが私に頼めば、私はより多くのコードを示すことができます。

Qt v4.7.3 を使用。

4

1 に答える 1

0

私には2つのアイデアがあります:

可能であれば、QGLWidget を使用するという考えを捨てて、スプライトをグラフィック シーン (QGraphicsPixmapItem) に直接配置します。おそらくあなたが望むものではないかもしれませんが、グラフィックシーンは多くのアイテムを処理するように作られているので、必要なもののほとんど (例えば、アイテムでのマウスイベントのトリガー) はすでに実装されています。

または、QGraphicsWidget を使用してグラフィック シーンに QGLWidget を配置するだけです。これにより、シーンにそのサイズが自動的に通知され、ビューにシーンのサイズが通知されます。シーンがビューに収まらない場合は、スクロール バーが自動的に表示されます。

アップデート:

このリンクで説明されているように、任意のグラフィック ビューで OpenGL を使用できます。

view.setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
view.setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
于 2012-06-03T21:45:35.317 に答える