Solved Array of Labels in Funktionen nutzen
-
Guten Tag liebe Leute,
ich habe mal wieder eine Anfängerfrage:
Wie kann ich ein Array of Pointers auf Qlables erstellen und dies dann im weiteren Verlauf der Klasse nutzen?
test.h:public: QLable* ArrayofLables[4]
test.cpp:
Konstruktor: ArrayofLables={ui->Label1, ui->Label2, ui->Label3, ui->Label4}; Funktion: test::Buttonclicked{ for(int i=0; i<4; i++){ ArrayofLables[i]->setStyleSheet("background: blue;"); } }
So hätte ichs gerne, das Funktioniert aber so nicht. Vielen Dank für eine Antwort!
-
@Jakobm789 das geht so natürlich nicht, ich hab ne vollwertige Beispielklasse gepostet, einfach irgendwo einfügen wird nicht funktionieren.
Lass es mich auf die Zeilen von deinem Post reduzieren:
test.h: public: std::array<QLabel*, 4> ArrayofLables; test.cpp: Konstruktor: ArrayofLables={ui->Label1, ui->Label2, ui->Label3, ui->Label4}; Funktion: test::Buttonclicked{ for(const auto &lbl : ArrayofLables) lbl->setStyleSheet("background: blue;"); }
-
Hi @Jakobm789
Als allererstes würde ich einmal davon abraten c-style arrays zu benutzen, C++ und Qt haben explizite Klassen die sich damit beschäftigen und die man verwenden sollte.
Wenn du die Länge das Arrays bereits während der Compilezeit kennst, und du es nicht an eine Qt-Funktion übergeben willst, würde ich std::array empfehlen:
class SomeClass : public QWidget { Q_OBJECT private: std::array<QLabel*, 4> m_LabelArray; public: explicit SomeClass( QWidget *parent = nullptr) : QWidget(parent) { QLabel *l1(new QLabel(this)); QLabel *l2(new QLabel(this)); QLabel *l3(new QLabel(this)); QLabel *l4(new QLabel(this)); m_LabelArray = {l1,l2,l3,l4}; for(const auto &lbl : m_LabelArray) lbl->setStyleSheet("background: blue;"); } public slots: };
alternative gehts auch mit std::vector oder dem Qt-equivalent QVector,
Vectors haben den Nachteil, dass sie heap Speicher verwenden anstatt stack, aber dafür muss man währen der Compilation die Größe nicht wissen -
@J-Hilk Danke für deine Hilfe! Jetzt zeigt er mir aber im Konstruktor der cpp "redefinition of SomeClass" an...
-
@Jakobm789 Musst schon zeigen was du gemacht hast. Sieht mir schwer nach copy/paste Fehler aus
-
@J-Hilk Genau ich habe genau deinen Code einfach kopiert und eingefügt.
-
@Jakobm789 das geht so natürlich nicht, ich hab ne vollwertige Beispielklasse gepostet, einfach irgendwo einfügen wird nicht funktionieren.
Lass es mich auf die Zeilen von deinem Post reduzieren:
test.h: public: std::array<QLabel*, 4> ArrayofLables; test.cpp: Konstruktor: ArrayofLables={ui->Label1, ui->Label2, ui->Label3, ui->Label4}; Funktion: test::Buttonclicked{ for(const auto &lbl : ArrayofLables) lbl->setStyleSheet("background: blue;"); }
-
@J-Hilk Funktioniert perfekt! Nochmals vielen Dank für deine Hilfe!