Verständnisfragen zu SIGNALS / SLOTS bzw. qApp

Alles rund um die Programmierung mit Qt
Antworten
Gapa
Beiträge: 63
Registriert: 4. Juli 2008 14:33
Kontaktdaten:

Verständnisfragen zu SIGNALS / SLOTS bzw. qApp

Beitrag 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
Gestern war heute noch morgen!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten