Ⅰ.2.5 如何使用Qt Signal Handles

来源:互联网 发布:木工柜门半盖怎么算法 编辑:程序博客网 时间:2024/05/22 03:32

注意:Qt-specific Squish

这个部分只应用于Qt版的Squish,因为它关系到Qt的特定功能。

使用installSignalHandler函数可以跟踪UI界面(或任何AUT QObject)widgets发出的Qt signals。

应该在AUT启动之后调用installSignalHandler函数,传递参数:一个已经存在的AUT对象的名字、一个信号签名和一个handler函数的名字。如果需要注册多个object/signal/handler组合体,可以多次调用这个函数。下面是一个非常简单的展示例子:

def tableItemChangedHandler(obj, item):      test.log('itemChanged emitted by object "%s" on item "%s"' %(objectMap.symbolicName(obj), item.text()))def main():    startApplication("addressbook")    # ... various actions ... now the table widgetexists    installSignalHandler(        ":Address Book - MyAddresses.adr.File_QTableWidget",        "itemChanged(QTableWidgetItem*)","tableItemChangedHandler")    #... the rest if the test

无论何时QTableWidget中的任何项发生了改变,将会调用tableItemChangedHandler函数,该函数携带一个发送了信号的table widget的引用。下面例子中,我们使用objectMap.symbolicName函数记录发送了信号的对象的symbolic name,以及改变了的QTableWidgetItem的text。因此每次发送信号(即,无论何时改变了一个table item),我们将会获取一条类似下面的log输出:

itemChanged emitted by object":Address Book - MyAddresses.adr.File_QTableWidget" on item "Done"
第一个被传给handler的参数始终是一个发送信号的对象的引用。如果该信号有任何参数,跟随着第一个参数,这些参数同样也被传给这个handler。所以在上面的例子中 itemChanged(QTableWidgetItem*) 信号有一个参数,因此该handler获取两份参数——发送信号的object和信号的table item。

当然,如果喜欢,我们可以注册许多handlers。下面是一些附加handler的例子:

def fileMenuHandler(obj, action):    test.log('triggered emitted by object "%s" for action "%s"' %(        objectMap.symbolicName(obj),action.text))def modelIndexClickedHandler(obj, index):    test.log(‘clicked emitted by object "%s" on index "%s"’ %s(      objectMap.symbolicName(obj), index.text))def cellClickedHandler(obj, row, column):    test.log('clicked emitted by object "%s" on cell (%d, %d)' %(        objectMap.symbolicName(obj), row, column))
记住,只可以为已经存在的对象安装handlers。所有的例子代码取自于Squish中examples/qt/addressbook/suite_*/tst_signal_handler,可以去该目录下查看全部代码。
0 0
原创粉丝点击