QDialog: Pflichtfelder
QDialog: Pflichtfelder
Hallo,
wollte mal fragen wie die Standard Lösung in Qt ist, wenn man bei einem Dialog erst die Pflichtfelder ausfüllen muss, bevor man auf Ok klicken kann.
Ich kann natürlich alle Elemente mit entsprechenden Signals besetzen und da entsprechend testen, aber evtl. gehts ja auch einfacher.
wollte mal fragen wie die Standard Lösung in Qt ist, wenn man bei einem Dialog erst die Pflichtfelder ausfüllen muss, bevor man auf Ok klicken kann.
Ich kann natürlich alle Elemente mit entsprechenden Signals besetzen und da entsprechend testen, aber evtl. gehts ja auch einfacher.
Jepp geht es.....
den Pflichtfeldern nen dynamic property geben und halt erst dann freigeben wenn alle true sind
ala
dann im dialog suchst alle widgets durch, schaust ob das property gesetzt ist und entscheidest dann.
ZB verundung aller felder oder sowas
den Pflichtfeldern nen dynamic property geben und halt erst dann freigeben wenn alle true sind
ala
Code: Alles auswählen
QLineEdit *nameEdit = new QLineEdit(this);
nameEdit->setProperty("mandatoryField", true);ZB verundung aller felder oder sowas
Ich mache das meistens so, dass ich die textChanged(const QString &)-Signals aller Edit-Felder mit einem Slot verbinde, der dann einfach abfragt, ob diese ausgefüllt sind.
z.B.:
z.B.:
Code: Alles auswählen
button->setEnabled(!edit1->text().isEmpty() && !edit2->text().isEmpty() && !edit3->text().isEmpty());So ähnlich habe ich es bisher auch gelöst, und wäre auch am einfachsten.TSS hat geschrieben:Ich mache das meistens so, dass ich die textChanged(const QString &)-Signals aller Edit-Felder mit einem Slot verbinde, der dann einfach abfragt, ob diese ausgefüllt sind.
z.B.:Code: Alles auswählen
button->setEnabled(!edit1->text().isEmpty() && !edit2->text().isEmpty() && !edit3->text().isEmpty());
und womit bist dabei flexibel?
// Der Code wurde nur hier geproggt... also kann Fehler enthalten[/code]
Code: Alles auswählen
bool bEnableOK = true
foreach ( QWidget *curWdg, this->findChildren<QWidget *>() )
{
QVariant property = curWdg->property("NEEDED");
if (property.isValid() )
{
bEnableOK &= property.toBool();
}
return bEnableOK;
}Was ich bei deiner Lösung jetzt nicht verstehe, ist wie das die Ausgefülltheit der Felder checkt.
Sonst ist das natürlich ok.
Und flexibel, naja, also eigentlich häng ich davor einen Codegenerator (und dem ist es egal
).
Nur hätt ich es halt gern ein schön bzw. wüsste wie man das am besten lösen kann.
Sonst ist das natürlich ok.
Und flexibel, naja, also eigentlich häng ich davor einen Codegenerator (und dem ist es egal
Nur hätt ich es halt gern ein schön bzw. wüsste wie man das am besten lösen kann.
kk...stimmt das hatte ich vergessen
das muss noch dazu
Also checken ob es ein Inputfeld ist und dann string checken ob der empty ist.
dann hast was generisches was auch funzt wenn was hinzufügst!
das muss noch dazu
Also checken ob es ein Inputfeld ist und dann string checken ob der empty ist.
dann hast was generisches was auch funzt wenn was hinzufügst!
Code: Alles auswählen
bool bEnableOK = true
foreach ( QWidget *curWdg, this->findChildren<QWidget *>() )
{
QVariant property = curWdg->property("NEEDED");
if (property.isValid() )
{
if(property.toBool() )
{
QLineEdit *le = q_objectcast<QLineEdit *>(curWdg);
if(le) // oder halt anderer typ
{
bEnableOK &= !le.isEmpty()
}
}
return bEnableOK;
}