1

最近、私は PyQt プログラムに取り組んでいます。最初は正規表現を処理するために python re モジュールを使用しましたが、python 文字列と QString の間の変換は私を混乱させます。そこで、QRegExp を変更しようとしました。

しかし、python reのIGNORECASE、MULTILINE、DOTALLを使いたいです。re.I を置き換える QRegExp.setCaseSensitivity() を見つけましたが、残りの 2 つの機能が見つかりません。誰でも助けることができますか?

QString を Python 文字列に変換する方法を教えてください。正規表現パターンとデータの両方がユーザーによって入力されるため、それらの型は QString です。

4

2 に答える 2

2

Qt の QRegExp クラスはまったく問題ありませんが、python の re モジュールははるかに柔軟です。また、文字列処理全般についても同じことが言えます。PyQt プログラムで多くの文字列処理を行う必要がある場合は、可能であればすべて Python で行うのが最善の方法です。

QString の変換は非常に簡単です。python2 では、次のことを行うだけです。

string = unicode(qstring)

また、通常は元に戻す必要はありません。QString を必要とする Qt API は、PyQt によって Python 文字列から自動的に変換されます。

QString 変換のより一般的な解決策は、 sip モジュール(PyQt がインストールされている場所ならどこでも利用できるはずです)を使用してグローバルに行うことです。これは、次のように、PyQt モジュールをインポートする前に、PyQt プログラムの開始時に行う必要があります。

import sip
sip.setapi('QString', 2)

from PyQt4 import QtCore, QtGui

これを行った後、通常は QString を返す Qt API は、代わりに Python Unicode オブジェクトを返します。この機能の詳細については、PyQt ドキュメントの互換性のない API の選択を参照してください。

最初はもう少し作業が必要になるかもしれませんが、長期的にはおそらくこの方法が最適です。1 つには、必要に応じて python3 への移植が容易になります。Python3 の場合、バージョン 2 API がデフォルトで選択されているため、上記のsetapi手順は必要ありません。

于 2013-12-18T19:27:15.030 に答える