2012-03-04 4 views
1

私は現在PySideにアプリケーションを書いていますが、終了時にウィンドウの寸法を保存します。 geometry()メソッドはPySide.QtCore.QRect(300, 300, 550, 150)のようなものを返しますが、私が望むのは(300, 300, 550, 150)です。私はそれを解析する方法を見つけることができたが、私はよりクリーンな方法が欲しい。助言がありますか?PySideのリストとしてgeometry()の内容を返します

答えて

3

構文解析なしで、よりクリーンな方法は、QSettingsを使用して、ネイティブアプリケーション設定ストレージ(Windowsレジストリ、.iniファイル、.plistファイル...)にジオメトリから返されたQRectを格納して取得することです。例えば

settings = QSettings(...);  
settings.setValue("lastGeometry", self.geometry()) 

# and to retrieve the value 
lastGeometry = settings.value("lastGeometry") 
if lastGeometry.isValid(): 
    self.setGeometry(lastGeometry) 

あなたもできるバイナリシリアライズまたは4の32ビット整数を表す16バイト配列にQDataStreamQRectをデシリアライズ。

+0

私はこのアプリケーションをクロスプラットフォームにしようとしていますが、主にLinux上で動作する必要があります。これはまだ実行可能ですか?これはgetRect()から返されたタプルをテキストファイルに保存するよりも利点がありますか? – Sotanaht

+1

主な利点は、 'applicationName'と' organizationName'プロパティを 'QApplication'オブジェクトに設定すると、あなたの設定は自動的に[プラットフォーム標準の場所]に保存されます(http://qt-project.org/ doc/qt-4.8/qsettings.html#locations-where-application-settings-are-stored)を使用しているため、その部分にプラットフォーム固有のコードを書く必要はありません。また、複数のプロセスからの安全性、同時アクセスを入力し、[QVariant'でサポートされているQt値の型](http://qt-project.org/doc/qt-4.8/qvariant.html#タイプ - 列挙型)。 – alexisdm

+0

私は実際に代わりにこれを使うかもしれないと思います。現在、ConfigParserはタプルを文字列として読み込むため、タプルの各数値を個別の変数として格納する必要があります。 – Sotanaht

4

getRect方法は、値のタプルを返します:

私はそれが外に回復ハンドルとしてrestoreGeometry()を使用を検討していました:

>>> widget.geometry().getRect() 
(0, 0, 640, 480) 
+0

ありがとうございます。私はalexisdmが私に彼の代わりに使う良い理由を与えない限り、この方法を使用します。 – Sotanaht

1

が、これは面白いかもしれません@alexisdmから1を受け入れたOPを考えます画面のウィンドウと上端から外れているもの。しかしはQByteArrayのを必要とし、私の場合は単純なPythonデータしか保存できません。だから私は文字列にバイト配列を有効にしようとしました:

encoded = str(self.saveGeometry().toPercentEncoding()) 
print('encoded: %s' % encoded) 
>>> encoded: %01%D9%D0%CB%00%01%00%00%FF%F... 

geometry = QtCore.QByteArray().fromPercentEncoding(encoded) 
self.restoreGeometry(geometry) 

Voilà!

関連する問題