3

指定されたサイズの QGraphicsScene と QGraphicsView を作成して、そのシーンを同じサイズで監視するにはどうすればよいですか?

これはばかげた質問のように聞こえますが、次のテスト コードを検討してください [1]。

import sys
from PyQt4 import QtGui, QtCore

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.scene = QtGui.QGraphicsScene(0, 0, 200, 200, self)
        self.view = QtGui.QGraphicsView(self.scene, self)
        #self.view.setMaximumSize(200, 200)
        self.setCentralWidget(self.view)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    win = MainWindow()
    win.show()
    sys.exit(app.exec_())

これを実行すると、QGraphicsView が表示され、スクロール バーのない小さなウィンドウが表示されます。ビューをシーンの指定されたサイズよりも小さくしたため、ウィンドウのスクロールバーが表示されます。ウィンドウを拡大すると、バーが消え、ビューのサイズがウィンドウに合わせて変更されます。これはすべて理にかなっています。

ここで、同じコードをもう一度実行しますが、コメント行 (前に # がある) のコメントを外します。ビューが内側にあるウィンドウが表示されますが、ビューにはスクロール バーがあります。ウィンドウを縮小するとビューも縮小されますが、ウィンドウを拡大するとビューは特定のサイズにしか拡大されません。これは驚くべきことではありません。驚くべきこと、ビューを最大サイズにしてもスクロール バーがまだ表示されていることです。ビューの最大サイズがコード内のシーンのサイズに明示的に一致しているため、これはわかりません。

なぜこれが起こるのですか?

他の質問でシーンとビューを強制的に合わせる方法が説明されていることは承知していますが、実際に作成したビューとシーンのサイズを理解したいので、明示的に指定されたサイズを使用しようとしています。

[1] 私は PyQt を使用しています。C++ ユーザーは「self」を「this」、「import」を「#include」と読みます。

編集:以下の受け入れられた答えは絶対に正しいです。これを読んだ他の人のために、ビューがレイアウト内にある場合は、レイアウトの余白も考慮する必要があることを付け加えたいと思います。これらは、QtDesigner などで明示的に設定できます。

4

1 に答える 1

5

わかりました、私はあなたのためにそれを解決しました!

QGraphicsView (QFrame のサブクラス) には境界線があります。以下の行をinitメソッドに追加すると:

self.view.setFrameShape(QtGui.QFrame.NoFrame)

次に、1px フレームを削除すると、期待どおりに動作します。

于 2013-10-18T01:34:16.500 に答える