Label- und Buttonbezeichnung als Variable?



  • Hallo zusammen,
    Ich habe ein kleines Problem mit der Verwendung von Labels und Buttons.
    Ich habe ein Programm, welches Daten aus einer Datei einliest und diese dann in einem Fenster mit mehreren Groupboxen ausgeben soll.
    Die Groupboxen bestehen aus je einem Label und 4 paarweise gruppierten Radiobuttons. Die Namen der Label und Radiobuttons sind bis auf eine Zahl identisch(z.Bsp.: Label_1 bis Label_8).
    Ich kann natürlich die Daten in die Label wie folgt zuweisen:

    ui->Label_1->setText(QString("Tür %1").arg(tueren[0].nummer));
    

    Nun zu meinem Problem:
    Ich möchte versuchen, den Code für die Zuweisung zu verkürzen, allerdings funktioniert mein Ansatz nicht so, wie Ich mir das vorgestellt habe:

    for (i=0, i<anzahl, i++)
    {
    QString lab = QString("Label_%1").arg(i+1);
    ui -> lab ->setText(QString("Tür %1".arg(tueren[i].nummer));
    }
    

    Für einen Hinweis auf meinen Denkfehler bzw. einen anderen Ansatz wäre ich sehr dankbar.



  • Dein Ansatz kann nicht funktionieren, weil der Compiler bei "ui -> lab" eine Membervariable lab erwartet (keine lokale Variable).
    Erzeuge dir ein Array, z.B.

    QLabel labels[] = { ui->Label_1, ui->Label_2, ui->Label_3, ui->Label_4 };
    

    und greife dann darauf (innerhalb der Schleife) zu

    labels[i]->setText(QString("Tür %1").arg(tueren[i].nummer));
    


  • Danke hat super funktioniert (mit einem zusätzlichen 😉

    //Bennennung der Türboxen
        QLabel *nummern[]={ui->nummer_1, ui->nummer_2, ui->nummer_3, ui->nummer_4, ui ->nummer_5, ui ->nummer_6, ui->nummer_7, ui->nummer_8};
        QLabel *namen[]={ui->tuername_1, ui->tuername_2, ui->tuername_3, ui->tuername_4, ui->tuername_5, ui->tuername_6, ui->tuername_7, ui->tuername_8};
    
        for  (short i=0; i< anzahl; i++)
        {
            nummern[i]->setNum(tueren[i].nummer);
            namen[i]->setText(tueren[i].name);
        }
    

    Jetzt hab ich allerdings noch eine Frage:

    Wie bekomme ich den Inhalt des Labels wieder in eine Variable?
    (Ich weiss, dass es schlechter Stil ist, die GUI als eine Art Zwischenspeicher zu missbrauchen, aber mir fällt auf die schnelle keine andere Lösung ein)



  • Stimmt, das *** fehlte.

    Und zum Auslesen des Textes

    QString text = namen[i]->text();
    


  • Besten Dank.
    Funktioniert Klasse.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum Compiler- und IDE-Forum in das Forum Andere GUIs - Qt, GTK+, wxWidgets verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Nochmal zum erzeugen des Arrays:

    Ich benötige die Arrays in verschiedenen Funktionen in einer .ccp.
    Um nicht in jeder Funktion das Array neu zu erzeugen, habe ich versucht dieses in der Headerdatei anzulegen.
    Leider bekomme ich dann die Fehlermeldung "zuviele Argumente".
    Ich habs schon auf verschiedene Wege versucht:

    1. komplett in der .h Datei anlegen

    QLabel *nummern[]={ui->nummer_1, ui->nummer_2, ui->nummer_3, ui->nummer_4, ui ->nummer_5, ui ->nummer_6, ui->nummer_7, ui->nummer_8};
    

    2. Nur Deklaration in der .h Datei

    QLabel *nummern;
    

    und dann Zuweisung in der .cpp

    nummern[]={ui->nummer_1, ui->nummer_2, ui->nummer_3, ui->nummer_4, ui ->nummer_5, ui ->nummer_6, ui->nummer_7, ui->nummer_8};
    

    Leider führt nichts zum Erfolg.
    Gibt es eine Möglichkeit diese Gruppe global zu definieren oder muss ich das ganze für jede Funktion lokal anlegen? (Ich brauch nicht nur das Label-Array sondern auch noch 8 Button-Arrays und das macht den Code unheimlich lang)



  • In Header:

    QLabel **nummern;
    

    In Source:

    nummern = new QLabel*[8] {ui->nummer_1, ui->nummer_2, ui->nummer_3, ui->nummer_4, ui ->nummer_5, ui ->nummer_6, ui->nummer_7, ui->nummer_8};
    

    Oder besser gleich mit std::vector:

    #include <vector>
    
    std::vector<QLabel*> nummern;
    
    nummern = {ui->nummer_1, ui->nummer_2, ui->nummer_3, ui->nummer_4, ui ->nummer_5, ui ->nummer_6, ui->nummer_7, ui->nummer_8};