0〜2^32-1の範囲の大きな整数のシグナル/スロットを使用しようとしています。少し奇妙なことを発見しました。7FFFFFFFを超える境界を発行すると、スロットの実行後にOverflowError例外がスローされます。IまたはQTがCやC++などの別の言語で符号付き32ビット整数を明示的に使用している場合、この種のオーバーフローが予想される可能性があります。ただし、Pythonでは、ラップなしで2^32になります。しかし、コードを書くときの私の仮定は、これはpythonであり、組み込みのintは非常に大きくなる可能性があり(おそらく任意のようになりますか?)、32ビットまたは64ビットまたは符号付き/符号なしとして明示的に定義する必要はないということでした。それはすべてうまくいくでしょう。
以下のコードは、私が見ているものを示しています(Python 2.7.2(64ビット)、Pyside 1.1.0、Windows 7)
from PySide.QtCore import *
@Slot(int)
def say(i):
print "Say %i" % i
class Communicate(QObject):
speak = Signal(int)
someone = Communicate()
someone.speak.connect(say)
someone.speak.emit(0x7FFFFFFF) #works fine
someone.speak.emit(0x80000000) #OverflowError after slot "say" runs
say(0x80000000) #works fine
正確な出力は次のとおりです。
2147483647と言う -2147483648と言います OverflowError 2147483648と言う
- Qtが整数型のシグナル/スロットをPython組み込みintではなく符号付き32ビット整数を処理するかのように扱うように見えるのはなぜですか?
- これがQtの制限である場合、intを符号なしとしてマークする、またはQTが0x7FFFFFFFを超える整数を処理できることを確認するにはどうすればよいですか?