Samstag, Dezember 14, 2019

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

3 Kommentare

  1. 2

    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 mit acessibleName() 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:

    for( QWidget * w : widgets )
    {
        w->setEnabled(false);
    }
    
    ui->myTable->setEnabled(true);

    Oder, schließlich, Sie können die objectName Eigenschaft mit der setObjectName() – Funktion, und verwenden Sie es, wie Sie in Ihrem code.

    • Danke. Ich ging über die Deaktivierung von allen widgets und aktivieren die, die ich will.
    • Bitte verwenden Sie foreach in ein Qt-code anstelle von C++11 features, die nur. Das ist, warum foreach ist immer noch rund, weil Qt arbeiten mit pre-c++11 Compiler zu diesem Zeitpunkt.
    • Ich enorm bezweifle, C++ hält 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.
  2. 2

    Den objectName Funktion nicht zurück, wird der name der Klasse oder der name der Variablen, aber das eigentliche Objekt name Sie gesetzt haben, mit QObject::setObjectName. Daher müssen Sie zuerst legen Sie es in Ihre Tabelle mit:

    myTable->setObjectName("myTable");
    • Als SingerOfTheFall vorgeschlagen, deaktivieren alle widgets und aktivieren die, die ich will, war einfacher in meinem Fall. Aber danke.
  3. 0

    Schreiben Sie diese auf die erste Zeile (entfernen Sie die Anführungszeichen aus den Klammern):

    QList<QWidget *> allWidgets = mainWindow->findChildren<QWidget *>();

Kostenlose Online-Tests

Letzte Fragen

Tun ItemView löst Blase?

Ich habe eine CompositeView für eine Tabelle. Ich habe Trigger-set in der Kind-ItemView für jede Zeile... var TableRow = Marionette.ItemView.extend({ tagName:...

Wie kann ich untersuchen, WCF was 400 bad request über GET?

Die folgenden WCF-endpoint funktioniert gut mit dem WCF test client: AssetList ListFlaggedAssets(short processCode, string platform, string endpoint = "null", string portalId = "null", int...

Bei der Verwendung von UUIDs, sollte ich auch mit AUTO_INCREMENT?

Wir bauen eine neue web-app, die eine offline-iPad - /Android-app-version auf einer Reihe von lokalen Geräten, die Einsätze mit neuen Daten. Als solche benötigen...

Actionscript-Objekt, das verschiedene Eigenschaften

Wie kann ich die Anzahl der Eigenschaften in einer generischen Actionscript-Objekt? (Wie die Array-Länge) InformationsquelleAutor Fragsworth | 2011-01-15

Wie plot mehrere Graphen und nutzen Sie die Navigations-Taste im [matplotlib]

Die neueste version von matplotlib erstellt automatisch Navigations-buttons unter den graph. Aber die Beispiele, die ich finden alles im Internet zeigen, wie erstellen Sie...