作者uranusjr (←这人是超级笨蛋)
看板Python
标题Re: [问题] Qt emit passing list
时间Thu Jan 12 15:43:12 2012
※ 引述《b60413 (None)》之铭言:
: 自行写了一个SIGNAL/SLOT的讯号要去Qt做事件触发
: 但想要在触发事件的时候传递参数给指定的function使用
: 测试过传递int的参数可以正常使用
: 但是使用string,array,list却无法正常使用
: 请问有人知道应该如何传递上述类型的参数吗?
: 底下附上使用int类型可以正常使用的code
: code:
: emit(SIGNAL("test(int)"),a)
: QObject.connect(tmp,SIGNAL("test(int)"),self,SLOT('test(int)'))
如果我没记错的话, 这跟你引用 PyQt 时的设定有关系
预设的设定中 PyQt 只能传 Qt 原生的类型, 所以跟一些 Python 类型不相容
以上面的三个例子, 你可以改传 QString 和 QList 等 Qt 类型
要得到原生的 Python 类型支援就必须转到新的 API 设定(API 2 之类的名字)
这样 PyQt 才会自动帮你进行进一步的转换, 把 QString 之类的类型直接代换掉
顺带一题你的 signal/slot 写法有点过时了
如果你是用比较新版的 PyQt, 建议用新写法, 比较清楚也比较好看
写法类似下面这样:
from PyQt4 import QtCore
class Sender(QtCore.QObject):
sig1 = QtCore.pyqtSignal(int)
class Receiver(QtCore.QObject):
def __init__(self, parent=None):
super(type(self), self).__init__(parent)
self.sender = Sender(self)
self.sender.sig1.connect(self.slot1)
self.sender.sig1.emit(10)
def slot1(self, foo):
print foo
--
╱ ̄ ̄ ̄╲
▏
◢█◣ ▏
︻█︻█ ▏
成龙表示: 是喔...
′/ ‵ ▏
╰╯ █╱
ψQSWEET ◥︶█◤
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.32.81.146