提问人:PiRK 提问时间:11/14/2023 更新时间:11/14/2023 访问量:49
如何使用 PyQt 信号发出 64 位无符号整数
How to emit a 64 bit unsigned integer with a PyQt signal
问:
我过去使用时遇到了整数溢出问题,因为似乎 python int 在 C++ 调用中变成了 C int(32 位有符号整数)。这将信号可以发出的最大值限制为 2,147,483,647。PyQt5.QtCore.pyqtSignal(int)
我通过发射来解决这个问题,但我想这会增加信号的开销。PyQt5.QtCore.pyqtSignal(object)
有没有办法准确指定我希望信号在我的 python 代码中发出哪种整数类型?
答:
在使用 PyQt 并处理信号插槽机制时,尤其是对于大整数时,您遇到的问题确实是由于 Python 在使用 时被转换为 C++。由于 C++ 中的 32 位有符号整数限制,此转换限制了整数大小。int
int
pyqtSignal(int)
使用是一种解决方法,因为它允许 Python 对象(包括 Python 的无限大小 )通过信号传输。但是,正如您正确指出的那样,由于 Python 对象的动态特性,这可能会增加开销。pyqtSignal(object)
int
要指定整数的确切类型,可以使用PyQt提供的特定C++整数类型。这些类型包括 、 和 32 位和 64 位整数,包括有符号和无符号。以下是使用它们的方法:QtCore.pyqtSignal
quint32
qint64
quint64
对于 64 位有符号整数:用于创建可以处理 64 位有符号整数的信号。这会将限额增加到 ±9,223,372,036,854,775,807。
QtCore.pyqtSignal('qint64')
from PyQt5.QtCore import pyqtSignal, QObject class MyEmitter(QObject): mySignal = pyqtSignal('qint64') def emit_signal(self, value): self.mySignal.emit(value)
对于 64 位无符号整数:如果需要无符号 64 位整数,则使用该整数,该整数允许最大值为 18,446,744,073,709,551,615。
QtCore.pyqtSignal('quint64')
mySignal = pyqtSignal('quint64')
通过使用这些类型指定信号,可以避免使用开销,并且仍然具有比默认 32 位范围更大的整数值范围。在传递的数据类型方面,它也更加精确,这在 Python 和 Qt 开发中通常是很好的做法。object
请记住在连接到它们的插槽中适当地处理这些信号,确保插槽功能与信号的数据类型兼容。
评论
object
is
评论
object
uint64
int32
int
int
SIGNAL
SLOT
int
long
long
object
"quint64"