发布于2023-11-18 10:23 阅读(10931) 评论(0) 点赞(26) 收藏(4)
我过去使用时遇到了整数溢出问题PyQt5.QtCore.pyqtSignal(int)
,因为在C++调用中python int似乎变成了C int(32位有符号整数)。这将信号可以发出的最大值限制为 2,147,483,647。
我通过发出 a 来解决这个问题PyQt5.QtCore.pyqtSignal(object)
,但我想这会给信号增加很多开销。
有没有办法准确指定我希望信号在 python 代码中发出哪种类型的整数?
当使用 PyQt 并处理信号槽机制时,尤其是大整数时,您遇到的问题确实是由于 Pythonint
在int
使用pyqtSignal(int)
. 由于 C++ 中的 32 位有符号整数限制,此转换限制了整数大小。
使用是一种解决方法,因为它允许通过信号传输pyqtSignal(object)
Python 对象(包括 Python 的无限大小)。int
然而,正如您正确指出的那样,由于 Python 对象的动态特性,这可能会增加开销。
要指定整数的确切类型,您可以使用QtCore.pyqtSignal
PyQt 提供的特定 C++ 整数类型。这些类型包括quint32
、qint64
、 和quint64
用于 32 位和 64 位整数(有符号和无符号)。以下是如何使用它们:
对于 64 位有符号整数:
用于QtCore.pyqtSignal('qint64')
创建可以处理 64 位有符号整数的信号。这会将限制增加到 ±9,223,372,036,854,775,807。
from PyQt5.QtCore import pyqtSignal, QObject
class MyEmitter(QObject):
mySignal = pyqtSignal('qint64')
def emit_signal(self, value):
self.mySignal.emit(value)
对于 64 位无符号整数:QtCore.pyqtSignal('quint64')
如果您需要无符号 64 位整数,则
使用该整数,该整数允许的值最大为 18,446,744,073,709,551,615。
mySignal = pyqtSignal('quint64')
通过指定这些类型的信号,您可以避免使用开销,object
并且仍然拥有比默认 32 位范围更大的整数值范围。它在传递的数据类型方面也更加精确,这在 Python 和 Qt 开发中通常都是很好的实践。
请记住在连接到它们的槽中适当地处理这些信号,确保槽函数与信号的数据类型兼容。
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/2039595/a6c56510f995d2c680d3/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!