Alle widgets von Parentwidget/-form auflisten (gelöst)
Verfasst: 17. Februar 2022 11:32
Hallo liebes Forum,
ich bin Anfänger/Autodidakt mit C++/Qt und stehe nun vor dem Problem, dass ich ein Formularfenster/Widget habe auf dem viele Groupboxes mit noch mehr Checkboxes installiert sind, welches ich vor einer Neueingabe resetten möchte (also alle gecheckten Boxes auf unchecked setzen). In C# war das relativ einfach zu bewerkstelligen z. B. mit:
Trotz intensiver Suche (es gibt für Qt fast nur offizielle Dokus) habe ich leider nichts dergleichen finden können. Auch hilft mir diese Doku nicht weiter, da es weder für Groupboxes eine entsprechende list()-Funktion gibt (nur .add()) noch ich irgendwas für das übergeordnete Widget finden konnte. Daher müsste ich jetzt alles "zu Fuß" machen im Stile von:
Erstens bläht das den gesamten Code fürchterlich auf und wird extrem lang und unübersichtlich und verletzt die DRY-Regel (Don`t repeat yourself).
Also nun zu meiner Frage: Gibt es in C++ ein Konstrukt, dass es möglich macht die Objekte elegant zurückzusetzen?
Evtl. gibt es auch die Möglichkeit das komplette Formular zu reloaden und damit automatisch zurückzusetzen?!?
Schon im Voraus vielen lieben Dank
ich bin Anfänger/Autodidakt mit C++/Qt und stehe nun vor dem Problem, dass ich ein Formularfenster/Widget habe auf dem viele Groupboxes mit noch mehr Checkboxes installiert sind, welches ich vor einer Neueingabe resetten möchte (also alle gecheckten Boxes auf unchecked setzen). In C# war das relativ einfach zu bewerkstelligen z. B. mit:
Code: Alles auswählen
System.Collections.IList panelList = Controls; // alle Controls in Liste zusammenfassen
for (int i = 0; i < panelList.Count; i++)
{
if (panelList[i] is MetroFramework.Controls.MetroPanel) // prüfen, ob Control ein Panel ist
{
MetroFramework.Controls.MetroPanel panel = (MetroFramework.Controls.MetroPanel)panelList[i];
System.Collections.IList controlList = panel.Controls;
for (int n = 0; n < controlList.Count; n++)
{
Control control = (Control)controlList[n];
if (control is MetroFramework.Controls.MetroTextBox) (control as MetroFramework.Controls.MetroTextBox).Text = "";
if (control is RadioButton) (control as RadioButton).Checked = false;
}
}
Code: Alles auswählen
if(ui->CheckBox->isChecked()){
ui->CheckBox->setAutoExclusive(false);
ui->CheckBox->setChecked(false);
ui->CheckBox->setAutoExclusive(true);
}
Also nun zu meiner Frage: Gibt es in C++ ein Konstrukt, dass es möglich macht die Objekte elegant zurückzusetzen?
Evtl. gibt es auch die Möglichkeit das komplette Formular zu reloaden und damit automatisch zurückzusetzen?!?
Schon im Voraus vielen lieben Dank