程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

如何使用 PyQt 信号发出 64 位无符号整数

发布于2023-11-18 10:23     阅读(10545)     评论(0)     点赞(26)     收藏(4)


我过去使用时遇到了整数溢出问题PyQt5.QtCore.pyqtSignal(int),因为在C++调用中python int似乎变成了C int(32位有符号整数)。这将信号可以发出的最大值限制为 2,147,483,647。

我通过发出 a 来解决这个问题PyQt5.QtCore.pyqtSignal(object),但我想这会给信号增加很多开销。

有没有办法准确指定我希望信号在 python 代码中发出哪种类型的整数?


解决方案


当使用 PyQt 并处理信号槽机制时,尤其是大整数时,您遇到的问题确实是由于 Pythonintint使用pyqtSignal(int). 由于 C++ 中的 32 位有符号整数限制,此转换限制了整数大小。

使用是一种解决方法,因为它允许通过信号传输pyqtSignal(object)Python 对象(包括 Python 的无限大小)。int然而,正如您正确指出的那样,由于 Python 对象的动态特性,这可能会增加开销。

要指定整数的确切类型,您可以使用QtCore.pyqtSignalPyQt 提供的特定 C++ 整数类型。这些类型包括quint32qint64、 和quint64用于 32 位和 64 位整数(有符号和无符号)。以下是如何使用它们:

  1. 对于 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)
    
  2. 对于 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黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

26 0
收藏该文
已收藏

评论内容:(最多支持255个字符)