2016-04-16 6 views
1

Ich experimentiere mit Designer-basierten Qt-Benutzeroberflächen. Eine der Eigenschaften einer Designer-Benutzeroberfläche ist die automatische Verbindung von Widget-Slots, wenn sie einem speziellen Namensmuster folgen ("on _...").Manuell aufrufen connectSlotsByName()

Die Verbindungen scheinen jedoch eingerichtet zu sein, sobald die Benutzeroberfläche eingerichtet ist. Ich möchte nicht, dass das passiert. Ich möchte die Benutzeroberfläche nach dem Laden programmgesteuert ändern, ohne unnötige Slot-Aufrufe zu erhalten.

Ist es also möglich, explizit zu steuern, wenn diese Verbindungen hergestellt werden, d. H. Wenn connectSlotsByName() aufgerufen wird?

Antwort

3

können Sie QObject::blockSignals verwenden unnötige Signale für einige Zeit zu blockieren, wie folgt aus:

widget->blockSignals(true); 
//do work 
widget->blockSignals(false); 

auch können Sie disconnect anrufen und dann connect für bestimmte Signale.

+0

Das sind gute Problemumgehungen. Vielen Dank. Ich beschloss, die automatische Funktion vollständig zu vermeiden. (Zusätzlich zu dem obigen Problem ermöglichen selbstgemachte Verbindungen Kompilierzeitprüfungen der Verbindungen). – Silicomancer

+0

Es gibt auch eine Erweiterung von clang static anaylyzer, die generierte Signal/Slots-Verbindungen zur Kompilierzeit http://reviews.llvm.org/D14592 und das Standalone-Tool https://github.com/etaoins/qconnectlint überprüfen kann – fghj