0

我刚刚开始为 Qt 应用程序维护一组嵌入式 Python 插件。我也是 PyQt 和 Python 的新手,所以请耐心等待。

我在一个对话框中有一个 QTreeWidget 的实现,其中“扩展”信号没有被相应的处理程序捕获。我有另一个对话框,它工作得很好。

在问题对话框中,我可以验证连接是否成功。

connected = wdg.connect(wdg.treeView_,SIGNAL("expanded(QTreeViewItem*)"), wdg.expanded)

评估为真。当我单击子指示器以展开项目时,[+] 符号变为减号,但没有其他任何反应。同样,当我单击 [-] 时,它会切换回 [+]。在这两种情况下,我已将 ChildIndicatorPolicy 设置为最初将指标设置为 SHOW。

在正常工作的对话框中,当用户单击加号时,将执行“扩展”处理程序。只有指示器在单击时才会切换。

我的处理程序代码很简单:

def expanded(self, item):
    logging.debug("In expanded handler")

我在日志记录调用中有一个断点,但从未到达该语句。

在失败的对话框中,我有另一个信号在上述信号之前立即连接,它工作得很好:

wdg.connect(wdg.treeView_,SIGNAL("currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)"), wdg.itemChanged)

有什么东西可以防止扩展信号发射或被捕获吗?也许是另一个事件?我应该寻找什么?我意识到我的命名法可能有点偏离,我也欢迎在这方面进行任何更正。

4

2 回答 2

3

QTreeView 扩展事件的信号是"expanded(QModelIndex)"

或者,考虑使用新风格的信号/槽语法。我发现这比查找特定信号的确切参数类型要容易得多。

wdg.treeView_.expanded.connect(wdg.expanded)
于 2011-09-02T23:33:52.150 回答
0

我发现了问题。尽管名称具有误导性,但该对象是一个QTreeWidge. 当我将信号名称替换为"expanded"to"itemExpanded"并将参数类型更改为 aQTreeWidgetItem*时,一切正常。

wdg.connect(wdg.treeView_, SIGNAL("itemExpanded(QTreeWidgetItem*)"), wdg.expanded)
于 2011-09-03T22:09:12.210 回答