Kleines Beispielprogramm funktioniert nicht



  • Hallo!

    So, habe jetzt mein erstes eigenes GUI-Programm unter Linux geschrieben, funktioniert aber nicht ganz. Das Programm habe ich in 3 Dateien aufgeteilt:

    ---------- Sourcecode ----------

    --- Datei 1: programm1.cpp ---

    #include<qapplication.h>
    #include<qpushbutton.h>

    #include "./myClass.h"

    int main( int argc, char** argv )
    {

    QApplication app (argc, argv);

    QWidget * window = new QWidget();

    app.setMainWidget(window);

    myClass* mc;
    mc->function1();

    QPushButton *Button = new QPushButton("Abbruch", window);
    QObject::connect (Button, SIGNAL(clicked()), mc, SLOT(slot1())); // <-- FEHLER

    window->show();

    return app.exec();

    }

    --- Datei 2: myClass.h ---

    #include<qobject.h>

    class myClass : public QObject{
    Q_OBJECT

    public:
    void function1(void);

    public slots:
    void slot1();
    };

    --- Datei 3: myClass.cpp ---

    #include<qfiledialog.h>

    #include "./myClass.h"

    void myClass::function1(void){

    QString s(QFileDialog::getOpenFileName(""));
    if(!s.isEmpty())
    exit(0);

    }

    void myClass::slot1(){

    QString s(QFileDialog::getOpenFileName(""));
    if(!s.isEmpty())
    exit(0);

    }

    ------------------------

    Habe die fehlerhafte Zeile mit einem Kommentar gekennzeichnet.
    Das Programm sollte ein kleines GUI erstellen und ein Objekt vom Typ "myClass" anlegen.
    Direkt beim Programmstart soll die Funktion "function1" des Objekts aufgerufen werden, wodurch ein FileDialog angezeicht wird. Falls bei diesem etwas ausgewählt wird, dann wird das Programm beendet.
    Gut, soweit funktioniert alles. Jetzt wollte ich allerdings, dass bei einem Klick auf den Button ebenfalls der FileDialog angezeigt wird. Und genau das Funktioniert nicht. Wenn ich das Klick-Ereignis des Buttons mit dem Slot meiner eigenen Klasse verbinden will beendet sich das Programm sofort - ich sehe (bis auf den FileDialog am Anfang) kein GUI. Ohne die Connect-Anweisung wird das GUI angezeigt.
    Was habe ich falsch gemacht?

    Ach, und noch eine zweite Frage: Wo befindet sich eigentlich die Codeausführung während das Fenster angezeigt wird? Bei VC++ wird immer eine Message-Loop durchlaufen, bei VB wird während der Benutzer nichts anklickt gar kein Code ausgeführt (zumindest aus Sicht des Anwendugs-Programmierers).
    Wie ist es hier?

    Danke!

    mfg



  • Wieviele Threads willst du denn in diesem Forum noch gleichzeitig öffnen? Warte doch erst einmal die Beantwortung eines Themas ab, bevor du zwei neue Fragen stellst.
    (Ich nehme doch an, es handelt sich immer um den selben "Einsteiger".)



  • Ja, ich bin noch der selbst Einsteiger. Aber gerade als Einsteiger hat man nun mal viele Fragen.
    Meine vielen Fragen sind aber unabhängig von einander, also finde ich es spricht nichts dagegen dass ich sie auch gleichzeitg stelle.

    mfg



  • hi,
    @Einsteiger:
    IMHO musst du den MetaObjectCompiler von Qt über die myClass.h laufen lassen und zu der programm.cpp noch die Zeile:

    #include "myClass.moc"
    

    hinzufügen. Das musst du immer machen, wenn du eigene Signale bzw. Slots definierst.

    Tschau Gartenzwerg



  • Hallo!

    Aha, aber wie verwende ich diesesn MOC. Habe das Programm zwar gefunden, aber welche Parameter muss ich übergeben?

    Danke!

    mfg


Anmelden zum Antworten