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


Anmelden zum Antworten