<div dir="ltr"><div>Hi all<br></div><div><br></div><div>Answering my own question for posterity<br></div><div><br></div><div>Turns out I can disconnect all slots from a signal by calling `my_action.triggered.disconnect()` without any arguments. My goal of replacing the native QGIS 'Add WMS/WMTS layer' dialogue with another one can be achieved like this:</div><div><br></div><div>```python</div><div><br></div><div>def my_handler():</div><div>    print("Hello")<br></div><div><br></div><div>action = iface.actionAddWmsLayer()</div><div>action.triggered.disconnect()</div><div>action.triggered.connect(my_handler)<br></div><div>```<br></div><div><br></div><div>This leaves another problem to be solved: How to restore the native QGIS dialogue when my would-be plugin is deactivated by the user. The following seems to work on QGIS 2.18:</div><div><br></div><div>```</div><div>provider_registry = qgis.core.QgsProviderRegistry.instance()</div><div>add_wms_dialog = provider_registry.selectWidget("wms")</div><div>action.triggered.disconnect()</div><div>action.triggered.connect(add_wms_dialog.show)</div><div><br></div><div>```</div><div><br></div><div>Best regards<br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Oct 2, 2017 at 12:41 PM, Ricardo Filipe Soares Garcia da <span dir="ltr"><<a href="mailto:ricardo.garcia.silva@gmail.com" target="_blank">ricardo.garcia.silva@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>Hi all<br><br></div>Is it possible to replace one of QGIS' dialogues with a custom one during runtime by using Python?<br></div><div><br></div><div>My concrete goal is to replace the dialogue that shows when clicking the 'Add WMS/WMTS Layer' with something custom. I'd like to enhance the native QGIS dialogue with additional elements for selecting additional dimensions, like time or elevation.</div><div><br></div><div>Can this be done?</div><div><br></div><div>I'm thinking that I'd only have to replace whatever slot is currently defined on the `iface.actionAddWmsLayer()` action with a custom function that would load my UI instead. The problem is that I can't seem to find where a signal's connected slots are stored with Qt.</div><div><br></div><div>Ideally there would be some introspection mechanism by which I'd be able to retrieve which slots are associated with the action's `triggered` signal - I can't seem to find it though. After knowing which slot(s) were connected to the action's signal, I would presumably be able to `disconnect()` them and then connect my own.</div><div><br></div><div>By looking at Qt's docs I thought that the QMetaObject class might be the place to look, but I still cannot find anything that looks seems to hold the registry of a signal's connected slots.</div><div><br></div><div>Thanks in advance :)<span class="HOEnZb"><font color="#888888"><br></font></span></div><span class="HOEnZb"><font color="#888888"><div><br></div><div><br></div><div><div><div><br>-- <br><div class="m_6435077902353583523gmail_signature" data-smartmail="gmail_signature">___________________________ ___ __<br>Ricardo Garcia Silva</div>
</div></div></div></font></span></div>
</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">___________________________ ___ __<br>Ricardo Garcia Silva</div>
</div>