Holen Sie sich objectname (gesehen aus dem Qt-Designer) von QWidget?
Möchte ich deaktivieren Sie alle, aber eine ausgewählte Gruppe von widgets in meine Qt-Anwendung.
Was ich versuche zu tun ist, Durchlaufen alle Kinder mainWindow mit findChildren
Sie und deaktivieren Sie alle die daraus resultierenden widgets außer 'myTable' mit setEnabled(false)
.
QList<QWidget *> allWidgets = mainWindow->findChildren<QWidget *>("");
QList<QWidget*>::iterator it;
for (it = allWidgets.begin(); it != allWidgets.end(); it++) {
if ((*it)->objectName() != "myTable") //here, objectName is not working!!
{
(*it)->setEnabled(false);
}
}
objectName()
innerhalb der oben if
- Anweisung nicht funktioniert. Was mache ich da?
InformationsquelleAutor fortytwo | 2013-11-26
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie die
accessibleName
Eigenschaft. Setzen Sie es für das widget, das Sie brauchen, und dann überprüfen Sie es in Ihrem Zyklus mitacessibleName()
Funktion. Es ist eine leere Zeichenfolge standardmäßig, so sollte es ziemlich einfach finden Sie Ihr widget.Andere alternative ist es, deaktivieren Sie alle widgets, und dann einfach aktivieren, die Sie brauchen direkt:
Oder, schließlich, Sie können die
objectName
Eigenschaft mit dersetObjectName()
- Funktion, und verwenden Sie es, wie Sie in Ihrem code.foreach
um, nur um von einem 3rd-party-Bibliothek. Benutzer können Programmieren, in welcher Dialekt von C++ Sie wollen; Sie sind nicht beauftragt, zur Unterstützung der pre-11-Compiler. Außerdem, selbst im Jahr 2012, bevor Sie gepostet, Qt wurde mit C++11 Funktionen in sich selbst: woboq.com/blog/cpp11-in-qt5.html. Ich schlage vor, Sie beenden Kokons aus Ihrer eigenen Codierung Meinungen, als wären Sie Tatsachen, die jeder andere auch hat, zu gehorchen.Den
objectName
Funktion nicht zurück, wird der name der Klasse oder der name der Variablen, aber das eigentliche Objekt name Sie gesetzt haben, mitQObject::setObjectName
. Daher müssen Sie zuerst legen Sie es in Ihre Tabelle mit:Schreiben Sie diese auf die erste Zeile (entfernen Sie die Anführungszeichen aus den Klammern):