Programmstrukturierung



  • Hacker schrieb:

    Zur ungarischen Notation: Das ist eig. unnötig. In modernen (/guten) IDEs kannst du einfach auf eine Variable zeigen, schon wird ihre Deklaration angezeigt.

    Making Wrong Code Look Wrong

    Hacker schrieb:

    Und m_ ist beschissen, [...]

    Da gibt's Argumente dafür und dagegen...

    Hacker schrieb:

    [...] es muss der Typ (also vllt. qf_) der Variable sein, der das Präfix bestimmt.

    siehe oben.



  • Hobo schrieb:

    Hacker schrieb:

    Zur ungarischen Notation: Das ist eig. unnötig. In modernen (/guten) IDEs kannst du einfach auf eine Variable zeigen, schon wird ihre Deklaration angezeigt. Und m_ ist beschissen, es muss der Typ (also vllt. qf_) der Variable sein, der das Präfix bestimmt.

    *hust* Das ist zwar Geschmackssache, aber Deine "moderne IDE" wird Dir eher behilflich sein, indem sie einen Datentyp via Mouse-Over anzeigt, als dass sie zeigt, wo die Variable deklariert wurde. Und wenn ein Snippet ins Board kopiert wird, stehts auch nicht dabei.

    Hab ich irgendwas von 'wo' gesagt?

    Zum Konstruktor: Hab ich gesagt, dass es außerhalb der Klasse funktioniert? Ich meinte das:

    MeineKlasse::MeineKlasse():
    qf_file("MeineDatei") {}
    


  • Hacker schrieb:

    Hobo schrieb:

    Hacker schrieb:

    Zur ungarischen Notation: Das ist eig. unnötig. In modernen (/guten) IDEs kannst du einfach auf eine Variable zeigen, schon wird ihre Deklaration angezeigt. Und m_ ist beschissen, es muss der Typ (also vllt. qf_) der Variable sein, der das Präfix bestimmt.

    *hust* Das ist zwar Geschmackssache, aber Deine "moderne IDE" wird Dir eher behilflich sein, indem sie einen Datentyp via Mouse-Over anzeigt, als dass sie zeigt, wo die Variable deklariert wurde. Und wenn ein Snippet ins Board kopiert wird, stehts auch nicht dabei.

    Hab ich irgendwas von 'wo' gesagt?

    Zum Konstruktor: Hab ich gesagt, dass es außerhalb der Klasse funktioniert? Ich meinte das:

    MeineKlasse::MeineKlasse():
    qf_file("MeineDatei") {}
    



  • [] Ja. Mein Gott.



  • void Testklasse::Hauptmethode()
    {
    if (ui.pushButtonEINS->clicked())
        {
        QFile Datei(erstellterHauptordner + "/Shell.sh");
       
    else if (ui.pushButtonZWEI->clicked())
        {
        QFile Datei(geladenerHauptordner + "/Shell.sh");
        }
    
        Datei.open(QIODevice::WriteOnly | QIODevice::Text);
    
        QTextStream out1(&Datei);
        out1 <<"..."
    }
    

    -->

    void Testklasse::Schreibe(const StringTyp& s)
    {
      QFile datei(s);
      datei.open(..);
      // ..
    }
    void Testklasse::Hauptmethode()
    {
       if (ui.pushButtonEINS->clicked())
        Schreibe(erstellterHauptordner + "/Shell.sh");
       else if (ui.pushButtonZWEI->clicked())
        Schreibe(geladenerHauptordner + "/Shell.sh");
    }
    


  • Hi,

    nach brotbernd's Vorlage habe ich den Ansatz jetzt wie folgt gewählt:

    class Testklasse
    {
    
    void ErstelltOderGeladen();
    QString ShellSkript;
    
    slots:
    void Hauptmethode();
    }
    

    Form.cpp:

    void Testklasse::Hauptmethode ()  // Zeile 137
    
    {
        ErstelltOderGeladen();
    
        QFile ShellSkriptDatei(ShellSkript);
    
        ShellSkriptDatei.open(QIODevice::WriteOnly | QIODevice::Text);
    
        QTextStream out1(&ShellSkriptDatei);
        out1 <<"..."
    }
    
    void ErstelltOderGeladen 
    {
        if (ui.pushButtonEINS->clicked())           // Zeile 127
    
        ShellSkript = erstellterHauptordner + "/Shell.sh";
    
        else if (ui.pushButtonZWEI->clicked())      // Zeile 131
    
        ShellSkript = geladenerHauptordner + "/Shell.sh";
    }
    

    Bekomme jetzt noch die Fehlermeldungen :

    /usr/include/qt4/QtGui/qabstractbutton.h: In Elementfunktion »void Testklasse::ErstelltOderGeladen()«:
    /usr/include/qt4/QtGui/qabstractbutton.h:127:10: Fehler: »void QAbstractButton::clicked(bool)« ist geschützt
    Form.cpp:127:56: Fehler: in diesem Zusammenhang
    Form.cpp:127:57: Fehler: »((Testklasse*)this)->Testklasse::ui.Ui::GUIbasisclassOpenFoamGUI::<anonymous>.Ui_GUIbasisclassOpenFoamGUI::pushButtonEINS->QPushButton::<anonymous>.QAbstractButton::clicked(0)« konnte nicht von »void« nach »bool« umgewandelt werden
    /usr/include/qt4/QtGui/qabstractbutton.h:127:10: Fehler: »void QAbstractButton::clicked(bool)« ist geschützt
    Form.cpp:131:74: Fehler: in diesem Zusammenhang
    Form.cpp:131:75: Fehler: »((Testklasse*)this)->Testklasse::ui.Ui::GUIbasisclassOpenFoamGUI::<anonymous>.Ui_GUIbasisclassOpenFoamGUI::pushButtonZWEI->QPushButton::<anonymous>.QAbstractButton::clicked(0)« konnte nicht von »void« nach »bool« umgewandelt werden
    make: *** [Form.o] Fehler 1
    

    Kann mir jemand weiterhelfen?



  • Nein, Du solltest wirklich erstmal einen simplen C++ Kurs machen.
    Das geht zu weit.



  • Ok 🙂 ,

    kannst mich aber vielleicht auf die Stellen hinweisen, die falsch sind?



  • Deine Klassendeklaration ist keine. Aber das sind alles so sachen, wie man eine Klasse deklariert ist z. B. mit etwas Mühe leicht herauszufinden. Das gleiche trifft auf die Funktion ErstelltOderGeladen zu etc.



  • Meine Klassendefinition ist falsch?
    Versteh ich nicht. Ich hab vielleicht die Header weggelassen und auch die Vererbung nicht angezeigt, aber ansonsten hab ich die für das Problem benötigten Daten doch aufgelistet...



  • Na, du lieferst die Daten ja hier auch Edit für Edit nach 😃



  • LOL,

    ja hab bei der Klasse die Klammern noch eingefügt (dachte das wäre jedem klar -> hast aber recht!) und aus der Methode ErstelltOderGeladen(ShellSkript) noch ErstelltOderGeladen() gemacht
    --> wobei zweiteres muss ich wirklich nochmal nachlesen bzw. was ich da mit meinem ersten Versuch erreichen wollte :D!

    Ansonsten wars das aber.

    Anscheinend liegt das Problem ja jetzt nur noch daran, dass die clicked() Methode "geschützt ist". Kann mir jemand sagen wie ich dieses Problem überwinde?



  • Die clicked() Methode macht nicht das was du denkst.

    Es handelt sich dabei um ein Signal, das ausgelöst wird, sobald der Button geklickt wird.

    Du kannst also nicht einfach so überprüfen, ob der Button geklickt ist, sondern musst einen slot anlegen, der aufgerufen wird, sobald der button geklickt wird.

    Das verbinden der signals&slots kannst du entweder automatisch per name machen lassen oder manuell per QObject::connect verbinden.

    Wenn du es autmatisch machen willst, dann versuch mal das:

    class Testklasse
    {
       ...
    private slots:
        void on_pushButtonEINS_clicked(bool checked);
    };
    

    Signals und Slots sind das A und O bei Qt, das solltest du wirklich verstanden haben, sonst wird das nichts mit Qt.

    Evtl mal ins Qt-Unterforum verschieben



  • Hacker schrieb:



  • Swordfish schrieb:

    Hacker schrieb:

    Jetzt Fresse. Langsam fängst du echt an, unangenehm zu werden. Also. Anscheinend verstehst du nicht, was genau ich meinte. Lassen wir es hier einfach so stehen. Wenn du nächstes mal bock auf eine sinnlose Diskussion hast, schreib mir bitte 'ne Mail. Das ist hier voll OT.



  • Du bist "voll OT".



  • Hacker schrieb:

    Jetzt Fresse. [...]

    Komm, lass' stecken - Du hast Mail.


Anmelden zum Antworten