Ich versuche, eine Konfigurationsmenü-Box für eine Anwendung zu erstellen, und habe ein QDialog-Feld verwendet, um die Optionen anzuzeigen, die der Benutzer ändern kann. Diese Box enthält QComboBoxes und QLineEdits, aber viele davon (7 Kombinationsfelder und 12 Zeilenbearbeitungen). Es gibt einen QPushButton im unteren Bereich namens "Apply Changes", der nur aktiviert werden sollte, wenn eine Eigenschaft in der Box geändert wird.Kann ein Slot aufgerufen werden, wenn eines der Widgets in einem Dialogfeld ein Signal ausgibt?
Muss ich jedes Signal von jedem Widget mit einem Slot verbinden, um die Schaltfläche einzeln zu aktivieren, oder gibt es ein Signal, das die QDialog-Box selbst aussendet, wenn sich ihre Widgets ändern?
Im Moment habe ich dies:
connect(Combo1,SIGNAL(activated(QString)),this,SLOT(fnEnable(QString)));
connect(Combo2,SIGNAL(activated(QString)),this,SLOT(fnEnable(QString)))
durch 17 weitere Linien dieser Verbindungen gefolgt.
void MyClass::fnEnable(QString)
{
ApplyButton->setEnabled(true); //It is initialised as false
}
Ich habe mich gefragt, ob es ein kürzerer Weg, dies zu tun war, vielleicht von QDialog emittieren ein Signal (wie bereits erwähnt)
dassIch weiß (ich nicht einen in den documentation finden konnte) das beschleunigt das Programm nicht, da nur die benötigte Verbindung aufgerufen wird, aber es würde weitere Versuche, ambitioniertere Dialoge zu erleichtern, erschweren.
Eigentlich gibt es kein solches Signal, sondern ein Ansatz ist, eine Liste von QComboBox zu erstellen und machen die Verbindungen mit einem für zum Beispiel: 'QList <*QCombobox> l; l << combobox1 << combobox2 << ....; for (auto combo: l) {connect (kombiniert, SIGNAL (aktiviert (QString)), dies, SLOT (fnEnable (QString))} '. Das gleiche würde mit QLineEdit getan werden – eyllanesc