Pyside2 信号槽 2d 数组签名定义,等效于列表列表

Posted

技术标签:

【中文标题】Pyside2 信号槽 2d 数组签名定义,等效于列表列表【英文标题】:Pyside2 signal slots 2d array signature definition, equivalent for list of list 【发布时间】:2018-10-03 19:06:41 【问题描述】:

我正在尝试将发出二维数组的signal 连接到处理该列表列表的slot

我在我的slot 定义和SIGNAL("slot_method(QList<QList<QString>>)") 中使用@Slot(list),但这似乎不起作用。

我想知道Qt 术语中列表列表的正确转换。

【问题讨论】:

【参考方案1】:

在 Python 中没有二维列表,只有列表,因此您必须使用签名 list

例子:

from PySide2 import QtCore


class Sender(QtCore.QObject):
    signal = QtCore.Signal(list)

    def on_test(self):
        l = [["a", "b", "c", "d"], ["A", "B", "C", "D"]]
        self.signal.emit(l)


class Receiver(QtCore.QObject):
    @QtCore.Slot(list)
    def on_receiver(self, l):
        print(l)
        QtCore.QCoreApplication.quit()


if __name__ == '__main__':
    import sys
    app = QtCore.QCoreApplication(sys.argv)

    sender = Sender()
    receiver = Receiver()
    sender.signal.connect(receiver.on_receiver)
    QtCore.QTimer.singleShot(1000, sender.on_test)

    sys.exit(app.exec_())

【讨论】:

这很好,谢谢。我想使用sender.signal.connect() 会处理签名。 @bardao 这是新语法,不要使用旧连接。 最后添加Qt.AutoConnection 是否对线程间连接有任何优化? @bardao Qt::AutoConnection 允许 Qt 选择使用 Qt::DirectConnection 如果接收者位于发送者的同一插槽中,或者如果它位于另一个线程中则使用 Qt::QQueueConnection。如果您知道您生活在另一个线程中,请使用 Qt::QQueueConnection,它更具可读性:doc.qt.io/qt-5/qt.html#ConnectionType-enum

以上是关于Pyside2 信号槽 2d 数组签名定义,等效于列表列表的主要内容,如果未能解决你的问题,请参考以下文章

使用 Qt Designer 在 PySide2 中实现信号/插槽时出错

PySide2 使用 QProgressBar 作为信号参数

什么是信号槽?深入理解信号槽

QT 信号和槽函数签名

Qt信号槽如何附带自定义参数

Qt笔记