为什么PySide仍然需要QString作为textChanged信号?

2024-09-23 14:32:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我以前的理解是PySide不需要QString。然而,我发现PySide(我在Python v2.7.5中使用v1.2.1)在这方面似乎不一致,这取决于我如何连接我的信号和插槽:

# This Way of wiring up signals and slots requires str
le = QLineEdit()
slotOnChanged = self.onChanged
le.textChanged[str].connect(slotOnChanged)

# But this Way requires QString
le = QLineEdit()
signalTextChanged = SIGNAL("textChanged(QString)")
slotOnChanged = self.onChanged
le.connect(signalTextChanged, slotOnChanged)

Tags: selfle信号connectway插槽pysiderequires
2条回答

PySide不需要QString类是正确的,但是错误地认为存在任何不一致性。在

pQuthy/Pyqt通常是Qt的C++库周围的相当薄的包装器。然而,与这个信号有一些明显的偏差。Qt(示例中的第二种方法)使用的语法需要C++签名参数的详细知识,而且很容易出错。而且,从python的角度来看,语法是不必要的冗长的,而且是“非语法的”。正因为如此,PySide/PyQt添加了一些语法“sugar”,它为信号和插槽提供了另一种更具python风格的语法。这是您的示例中的第一个方法使用的。在

< QString >第二种方法中使用的特殊原因是Qt信号定义为EM>静态ESE>作为C++类的一部分。因此,为了使连接成功,对信号的论证必须与C++定义完全匹配。但是请注意,SIGNAL的参数并不要求QString可用,它只需要在签名中使用字符串“QString”。在

连接信号的“旧”、C++方式可能会持续相当长一段时间(如果没有其他的话,向后兼容)。但是,如果可能的话,最好使用“新的”Python式的方法。只是更清晰,更易读。在

简而言之:效率。在

QString由QChar组成。这些提供了C++和Python绑定之间的跨平台兼容性(以及更容易的语言翻译);Python中的字符串与C++中的字符串通常是不同的。Qt提供自己的。在

textChanged(QString)使用QString是因为。。。 1) 它可以在语言绑定之间提供一个更不可知的类型, 2) 它避免了第一个示例中发生的类型转换,而且效率更高。在

Here是QString的详细描述。注意隐式共享的链接。在

Here是PySide更惯用的其他可能性的例子。在

相关问题 更多 >