我刚开始为Qt应用程序维护一组嵌入式Python插件。我也是PyQt和Python的新手,所以请耐心等待。
我在一个对话框中有一个QTreeWidget的实现,其中“扩展”信号没有被相应的处理程序捕获。我有另一个对话框,它可以正常工作。
在问题对话框中,我可以验证连接是否成功。
connected = wdg.connect(wdg.treeView_,SIGNAL("expanded(QTreeViewItem*)"), wdg.expanded)
评估为True。当我单击子指示器以展开项目时,[+]符号会变为减号,但不会发生任何其他情况。同样,当我点击[ - ]时,它会切换回[+]。在两种情况下,我都将ChildIndicatorPolicy设置为最初将指标设置为SHOW。
在可以正常工作的对话框中,当用户点击加号时,会执行“展开”处理程序。只有指针在单击时切换。
我的处理程序代码很简单:
def expanded(self, item):
logging.debug("In expanded handler")
我在记录调用时有一个断点,但是从未到达该语句。
我失败的对话框,我有另一个信号在上面的信号之前就已经连接了,它运行得很好:
wdg.connect(wdg.treeView_,SIGNAL("currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)"), wdg.itemChanged)
是否有任何可以阻止扩大信号发射或被捕获的东西?也许是另一件事?我应该寻找什么?我意识到我的命名可能有些偏差,我也欢迎在这方面做出任何修正。
答案 0 :(得分:2)
QTreeView扩展事件的信号为"expanded(QModelIndex)"。
或者,考虑使用new style signal/slot syntax。我发现它比查找特定信号的确切参数类型容易得多。
wdg.treeView_.expanded.connect(wdg.expanded)
答案 1 :(得分:0)
我发现了问题。尽管名称误导,但对象是QTreeWidge
。当我将信号名称从"expanded"
替换为"itemExpanded"
并将参数类型更改为QTreeWidgetItem*
时,一切正常。
wdg.connect(wdg.treeView_, SIGNAL("itemExpanded(QTreeWidgetItem*)"), wdg.expanded)