Seite 1 von 1

Verständnisfragen zu SIGNALS / SLOTS bzw. qApp

Verfasst: 8. Juli 2008 16:13
von Gapa
Hallöle!

ich arbeite nun schon seit längerem mit C++ (knapp 1,5 Jahre) und dachte mir, ich könnte mal "was anderes" machen als immer diese blöden Konsolenprogramme.
Gesagt - Getan. Also machte ich mich auf die Suche nach einem guten Qt-Buch.
Nach Sage und Schreibe 2 Tagen hatte ich dann endlich Qt so installiert und an meine Dev-Cpp IDE angepasst, dass ich auf Knopfdruck ein neues Qt-Script erstellen konnte :lol:
Nun versuchte ich mich an dem berühmten "Hallo Welt" - Programm mit Qt.
Bisher lief eigentlich auch alles ganz gut, jedoch blieb ich bei den SIGNALS und SLOTS dann leider hängen, und zwar mit folgendem Problem:

Frage 1:
Für was genau benutze ich dieses "qApp" denn genau?


Angenommen, ich habe ein Fenster mit einem Button. Wenn nun auf diesen Button geklickt wird, so soll sich dieses Fenster schließen.
Wieso funktioniert dann folgender Code nicht:

Code: Alles auswählen

#include <QApplication>
#include <QPushButton>

class MyWidget : public QWidget
{
  Q_OBJECT
  private:
    QPushButton *Button;
  public:
    MyWidget();
    ~MyWidget();
};

MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
    Button = new QPushButton("Beenden");
    setWindowTitle("Zweites Fenster");
    connect( button, SIGNAL( clicked() ), Window_Main, SLOT( close() ));
}

MyWidget::~MyWidget()
{
}

int main(int argc, char *argv[])
{
  QApplication Window_Main(argc, argv);
  MyWidget Window_Child = new MyWidget(Window_Main);
  return Fenster.exec();
}
Ich verstehe hier nun erst mal nicht, warum dieser Code nicht funktioniert... :?:

Bei den SIGNALS/SLOTS habe ich dann das selbe Problem mit dem Parent-Window:

Code: Alles auswählen

#include <QApplication>
#include <QPushButton>

class MyWidget : public QWidget
{
  private:
    QPushButton *Button;
  public:
    MyWidget();
    ~MyWidget();
};

MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
    Button = new QPushButton("Beenden");
    setWindowTitle("Zweites Fenster");
}

MyWidget::~MyWidget()
{
}

int main(int argc, char *argv[])
{
  QApplication Window_Main(argc, argv);
  MyWidget Window_Child = new MyWidget(Window_Main);
  return Fenster.exec();
}
Frage 2:
Und warum brauche ich für die SIGNALS / SLOTS überhaupt die Angabe des Elternfensters? Ohne diese bräuchte ich ja den Basisinitialisierer für QWidget in Zeile 14 gar nicht... :? :?

Ich hoffe ihr könnt mir bei diesem Problem ein wenig weiterhelfen, denn ich verzweifle sonst bald.. Wenn ich das erst mal richtig verstanden habe, bin ich wohl übern Berg :D

Viele Grüße
Gapa

Verfasst: 8. Juli 2008 16:50
von Christian81
Wenn Du eh neu anfängst -> [url=http://doc.trolltech.com/4.3/tutorial.htmlQt Tutorial durcharbeiten![/url]

'Code nicht funktioniert' ist sehr vage. Ich würde sagen es ist total unmöglich dass es kompiliert. z.B. ist QApplication kein QWidget, dass die Klassendefinition nicht in einem Header ist ist auch schlecht - da kann Q_OBJECT nicht funktionieren da moc nichts findet. Und dass man ein Parent für Signals/Slots braucht ist mir auch neu.