Question

I just started maintaining a set of embedded Python plugins for a Qt application. I'm also new to both PyQt and Python, so bear with me.

I have an implementation of a QTreeWidget in one dialog where the "expanded" signal is not being caught by the corresponding handler. I have another dialog where it works just fine.

In the problem dialog, I can verify that the connect was successful.

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

evaluates to True. When I click on the child indicators to expand an item, the [+] signs change to a minus, but nothing else happens. Likewise, when I click on the [-], it toggles back to [+]. I have set the ChildIndicatorPolicy to initially set the indicator to SHOW in both cases.

In the dialog that works OK, when the user clicks on the plus sign, the 'expanded' handler is executed. Only the indicator toggles when it is clicked.

My handler code is simply:

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

I have a breakpoint at the logging call, but the statement is never reached.

I the failing dialog, I have another signal that's connected immediately before the one above, and it works just fine:

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

Is there anything that could prevent an expanded signal from firing or being caught? Another event perhaps? What should I be looking for? I realize that my nomenclature may be a bit off, and I welcome any correction in that regard as well.

Was it helpful?

Solution 2

I found the problem. Despite the misleading name, the object is a QTreeWidge. When I replaced the name of the signal from "expanded" to "itemExpanded" and changed the parameter type to a QTreeWidgetItem*, everything worked.

wdg.connect(wdg.treeView_, SIGNAL("itemExpanded(QTreeWidgetItem*)"), wdg.expanded)

OTHER TIPS

The signal for a QTreeView expansion event is "expanded(QModelIndex)".

Alternatively, consider using the new style signal/slot syntax. I find it much easier than looking up the exact argument type for a particular signal.

wdg.treeView_.expanded.connect(wdg.expanded)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top