label ansprechen in mainwindow.cpp



  • Hallo,
    ich komme leider nicht weiter. Und zwar möchte ich Widgets ansprechen in der mainwindow.cpp-Datei.
    Beispiel:
    Das Label "label" habe ich mit dem Qt Designer erzeugt und dem Label möchte ich jetzt einen Text zuweisen. Ich habe es versucht mit
    ui->label->setText("Test");

    kompletter Code:
    int main(int argc, char *argv[])
    {
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    ui->label->setText("Test");

    return a.exec();
    }

    Ich bekomme folgende Fehlermeldung: 'ui' was not declared in this scope

    Was mache ich falsch?
    Danke sehr



  • So etwas macht man eigentlich in der entsprechenden Klasse MainWindow. "ui" ist eine üblicherweise private Membervariable von MainWindow und du kannst daher nicht einfach so darauf zugreifen. Der Compiler weiß ja nicht, von welchem Objekt du "ui" ansprechen willst.
    Deshalb: im ctor von MainWindow einfach dein ui->label->setText("Test"); einfügen.

    Allerdings würde ich dir empfehlen, erst noch einmal ein gutes Grundlagenbuch durchzuarbeiten. Es ist aus meiner Sicht nicht hilfreich, wenn man zu früh mit GUIs anfängt, gerade bei C++.



  • Danke für deine Antwort, Skylac06.
    In der mainwindow.cpp bekomme ich das auch hin. Ich wusste nur nicht, ob dies in der Regel immer in der mainwindow.cpp-Datei geschrieben wird. Oder ob das auch in der main.cpp der Fall ist.
    Die Anweisung würde ich dann z.B. in den Konstruktor tun.

    Wie ist es eigentlich wenn ich eigene Klassen erstelle?
    Wenn ich z.B. die Klassenvereinbarungen in einer eigenen Header-Datei erstelle und die Methoden der Klasse in einer .cpp-Quelldatei, das ist doch richtig so oder?
    Aber wie kann ich von diesen Datein aus auf Widgets wie z.B. das Label zugreien? Dann habe ich dasselbe Problem wie im 1. Post. oder mache ich da jetzt auch was falsch?

    Das Gleiche Problem mit den eigenen Klassen hätte ich ja auch wenn ich all diese Anweisungen in der main.cpp-Datei schreibe.

    Wäre sehr hilfreich wenn mir da jemand weiterhelfen kann. Danke!



  • Wenn du das in den ctor schreibst, dann ist das bei jedem weiteren Objekt von MainWindow auch so. In der main()-Funktion würde es nur das eine Objekt betreffen.

    Wenn du mit "die Methoden der Klasse in eine andere Quelldatei schreiben" meinst, dass du die Definition (also den Code) der Methode in die *.cpp-Datei schreibst, dann stimmt das meistens. Ausnahmen sind inline-Methoden und je nach Geschmack auch kurze Methoden.

    Woher hast du denn deine bisherigen C++-Grundlagen?
    Nicht böse gemeint, aber da scheinen die Fundamente noch nicht 100%-ig zu stehen.
    Eine persönliche Buchempfehlung wäre, wenn es deutsch sein soll, für den Anfang "Der C++ Programmierer" von Ulrich Breymann. Ein meiner Meinung nach gutes Buch, mit dem auch ich mich eine Zeit lang beschäftigt habe. Es ist, selbst wenn man die Grundlagen bereits kann, interessant zu lesen.



  • Mein bisheriges Wissen stammt aus dem C++ Lerngang den ich momentan mache.
    Ja, das Buch von Ulrich Breymann soll wirklich gut sein, habe es schon länger im Auge und werde es demnächst mal anschaffen.



  • Man sollte definitiv erst die Grundlagen festigen, bevor man andere Frameworks verwendet und zu früh mit GUIs startet ohne das nötige Wissen um Objektorientierung und die richtige Verwendung. Dies wurde dir anscheinend nicht ordentlich genug vermittelt, da trifft dich (vermutlich) keine Schuld.
    Allerdings solltest du, wenn du wirklich anstrebst, C++ (und auch Programmieren allgemein) zu lernen, dann musst du eben dies zumindest noch einmal tiefgehend wiederholen mithilfe eines guten Buches oder Tutorials (wobei ich kein wirklich gutes auf Anhieb nennen könnte).


Log in to reply