einfacher taschenrechner = proplem
Ich würde für ein layout das du hinzufügen möchtest nicht
sonder
verwenden!
Code: Alles auswählen
addWidget()Code: Alles auswählen
addLayout()leider klappt das so auch nicht! bist du dir sicher das es addLayout() überhaupt gibt? der compiler behandelt das nämlich immer als member mit der folgenden fehlermeldung:
wie bekomm ich das grid in das stackedwidget?
Code: Alles auswählen
error: "class QWidget" has no member named "addLayout"Prinzipiell:
Er braucht nicht die Definition der Klassen, er braucht nur den Typnamen ...
Ist viel robuster, weil weniger Abhaengigkeiten.
die Includes sollten dann natuerlich in die cpp wieder wandern.
Die Definition eines Typs brauchst du nur fuer:
- konkrete Membervariable (also keine zeiger auf)
- Ableitungen ...
(also generell wann man den eine Instanz des Types im Speicherbereich der eigenen Instanz miterzeugt)
- wenn du funktionen des Typs im Header aufrufst (Header Implementierungen)
ansonsten langt nen forward.
Das sollt man sich schon recht zeitig angewoehnen ....
Ciao ....
NEIN !!! nicht in dem Fall.du solltest die Qt Klassen in deinem Header includen (nicht in der cpp-Datei), denn wenn du dein QLineEdit im Header deklarierst, benötigst du sie da bereits.
Er braucht nicht die Definition der Klassen, er braucht nur den Typnamen ...
Code: Alles auswählen
#ifndef TASCHENRECHNER_H
#define TASCHENRECHNER_H
#include <QWIDGET>
class QLineEdit;
class QStackedWidget;
class rechner : public QWidget{
Q_OBJECT
public:
rechner(QWidget *parent = 0);
private slots:
void addieren();
void subtrahieren();
void showaddieren();
void showsubtrahieren();
void klosen();
private:
QLineEdit *inputa;
QLineEdit *inputb;
QLineEdit *inputc;
QLineEdit *inputa2;
QLineEdit *inputb2;
QLineEdit *inputc2;
QStackedWidget *stacked;
};
#endif
die Includes sollten dann natuerlich in die cpp wieder wandern.
Die Definition eines Typs brauchst du nur fuer:
- konkrete Membervariable (also keine zeiger auf)
- Ableitungen ...
(also generell wann man den eine Instanz des Types im Speicherbereich der eigenen Instanz miterzeugt)
- wenn du funktionen des Typs im Header aufrufst (Header Implementierungen)
ansonsten langt nen forward.
Das sollt man sich schon recht zeitig angewoehnen ....
Ciao ....
danke danke, ist echt ne super plattform hier 
leider bräuchte ich nochmals hilfe bei einer kleinigkeit. will nun noch eine QMenuBar integrieren, jedoch zeigt er sie nicht an (keinen fehler beim compiler)
hier mal der aussschnitt der rechner.cpp:
kann ich überhaupt eine menubar zu einen widget als fenster dazufügen?
leider bräuchte ich nochmals hilfe bei einer kleinigkeit. will nun noch eine QMenuBar integrieren, jedoch zeigt er sie nicht an (keinen fehler beim compiler)
hier mal der aussschnitt der rechner.cpp:
Code: Alles auswählen
quid = new QAction(parent);
quid -> setText ("quit");
connect(quid, SIGNAL(triggered()), this, SLOT(klosen()));
addi = new QAction(parent);
addi -> setText ("quit");
connect(addi, SIGNAL(triggered()), this, SLOT(showaddieren()));
subt = new QAction(parent);
subt -> setText ("quit");
connect(subt, SIGNAL(triggered()), this, SLOT(showsubtrahieren()));
QMenu *menudatei = new QMenu;
menudatei -> addAction (quid);
QMenu *menuchoose = new QMenu;
menuchoose -> addAction (addi);
menuchoose -> addAction (subt);
QMenuBar *menubar = new QMenuBar;
menubar -> addMenu (menudatei);
menubar -> addMenu (menuchoose);Mit dem gezeigten code hasst zwar ne Menubar mit menustruktur definiert, die aber weder layouttechnisch, noch QT hirarchietechnisch, an dein fenster(widget) gekoppelt ist ... das ding schwebt irgendwo, wird also nie angezeigt werden.
QT Oberflaechenelemente (Qwidgets und deren ableitungen) solltest immer mit zeiger auf das parent gleich erzeugen ... damit haengt es in der QT Parent/client hirarchie und wird automatisch zerstoert, wenn dein Parent widget zerstoert wird. sonst gibts haessliche ressorcenlecks.
layouttechnisch ist dein einhaengepunkt aber eigentlich die menubar ....
die kann man sich von QMenuBar * menuBar () const von nem QMainwidget holen .... "Normale" widgets haben eigentlich keine Menubars, sondern nur context menues.
So sollte es funktionieren ... hab sicher noch schreibfehler und so drinn ...
wie gesagt, dein fenster in dem grad bist, sollte aber nen QMainWidget sein ....
Ciao ...
QT Oberflaechenelemente (Qwidgets und deren ableitungen) solltest immer mit zeiger auf das parent gleich erzeugen ... damit haengt es in der QT Parent/client hirarchie und wird automatisch zerstoert, wenn dein Parent widget zerstoert wird. sonst gibts haessliche ressorcenlecks.
layouttechnisch ist dein einhaengepunkt aber eigentlich die menubar ....
die kann man sich von QMenuBar * menuBar () const von nem QMainwidget holen .... "Normale" widgets haben eigentlich keine Menubars, sondern nur context menues.
Code: Alles auswählen
QMenuBar * myMenu = QMenuBar();
QMenu *menudatei = new QMenu(myMenu );
menudatei->setTitle(tr("Datei"));
QMenu *menuchoose = new QMenu(myMenu);
menuchoose->setTitle(tr("Auswahl"));
quid = new QAction(menudatei );
quid -> setText ("quit");
connect(quid, SIGNAL(triggered()), this, SLOT(klosen()));
addi = new QAction(menuchoose );
addi -> setText ("quit");
connect(addi, SIGNAL(triggered()), this, SLOT(showaddieren()));
subt = new QAction(menuchoose );
subt -> setText ("quit");
connect(subt, SIGNAL(triggered()), this, SLOT(showsubtrahieren()));
// und falls es ned langt die layout struktur explizit noch mal einstellen
// bin mir ned sich ob man das wirklich braucht
menudatei -> addAction (quid);
menuchoose -> addAction (addi);
menuchoose -> addAction (subt);
myMenu -> addMenu (menudatei);
myMenu -> addMenu (menuchoose);
wie gesagt, dein fenster in dem grad bist, sollte aber nen QMainWidget sein ....
Ciao ...