Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: Andere GUIs - Qt, GTK+, wxWidgets ::  Label- und Buttonbezeichnung als Variable?     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
MathiasS
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.10.2017
Beiträge: 17
Beitrag MathiasS Mitglied 10:37:18 24.11.2017   Titel:   Label- und Buttonbezeichnung als Variable?            Zitieren

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:
C++:
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:
C++:
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.
Th69
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.03.2008
Beiträge: 4723
Beitrag Th69 Mitglied 11:41:48 24.11.2017   Titel:              Zitieren

Dein Ansatz kann nicht funktionieren, weil der Compiler bei "ui -> lab" eine Membervariable lab erwartet (keine lokale Variable).
Erzeuge dir ein Array, z.B.
C++:
QLabel labels[] = { ui->Label_1, ui->Label_2, ui->Label_3, ui->Label_4 };
und greife dann darauf (innerhalb der Schleife) zu
C++:
labels[i]->setText(QString("Tür %1").arg(tueren[i].nummer));
MathiasS
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.10.2017
Beiträge: 17
Beitrag MathiasS Mitglied 18:38:15 24.11.2017   Titel:              Zitieren

Danke hat super funktioniert (mit einem zusätzlichen *)
C++:
1
2
3
4
5
6
7
8
9
 //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)
Th69
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.03.2008
Beiträge: 4723
Beitrag Th69 Mitglied 10:10:45 25.11.2017   Titel:              Zitieren

Stimmt, das * fehlte.

Und zum Auslesen des Textes
C++:
QString text = namen[i]->text();


Zuletzt bearbeitet von Th69 am 10:14:06 25.11.2017, insgesamt 1-mal bearbeitet
MathiasS
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.10.2017
Beiträge: 17
Beitrag MathiasS Mitglied 17:39:39 26.11.2017   Titel:              Zitieren

Besten Dank.
Funktioniert Klasse.
C++ Forumbot
Forumbot

Benutzerprofil
Anmeldungsdatum: 29.02.2004
Beiträge: 20068
Beitrag C++ Forumbot Forumbot 20:57:35 26.11.2017   Titel:              Zitieren

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.

_________________
Besuchen Sie unsere Bücherecke.
http://www.c-plusplus.de/bucher.php
Mit jeder Bestellung unterstützen Sie das Forum.
MathiasS
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.10.2017
Beiträge: 17
Beitrag MathiasS Mitglied 15:36:12 05.12.2017   Titel:              Zitieren

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
C++:
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
C++:
QLabel *nummern;

und dann Zuweisung in der .cpp
C++:
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)
Th69
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.03.2008
Beiträge: 4723
Beitrag Th69 Mitglied 16:16:14 05.12.2017   Titel:              Zitieren

In Header:
C++:
QLabel **nummern;

In Source:
C++:
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:
C++:
#include <vector>
 
std::vector<QLabel*> nummern;

C++:
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};
C++ Forum :: Andere GUIs - Qt, GTK+, wxWidgets ::  Label- und Buttonbezeichnung als Variable?   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.