nWidget->rotWidget->qSlider versteht mein Rechner nicht
-
Huhu !
Ich hab folgendes Problem, das nicht funktioniert:
Das Prog benutzt zwar Qt, aber das hier sieht mir eher nach was rein C++-mäßigem aus. Also, ich habe eine Klasse main.cpp darin habe ich ein NavigationWidget und ein openGL Widget reingesteckt. In das NavigationsWidget habe ich wiederum ein RotationWidget mit einem qSlider gesteckt. Die einzlnen Objekt hab ich wie folger erzeugtIn der main.cpp
NavigationWidget* nWidget = new NavigationWidget (this); MyGLWidget* myGLWidget = new MyGLWidget(this);
NavigationWidget ist RotationWidget so erzeugt:
RotationWidget* rotWidget = new RotationWidget(qBox);
Und in RotationWidget hab ich der QSlider so erzeugt:
QSlider* qSlider = new QSlider(qBox);
Ich denk mal das alles weitere in den Klassen nicht so wichtig ist.
So nun möchte ich gerne ein Signal von qSlider an MyGLWidget schicken mit:
QObject::connect( nWidget->rotWidget->qSlider , SIGNAL (valueChanged(int) ) , myGLWidget, SLOT (setAngle(int) ) );
Problem ist "nWidget->rotWidget->qSlider". Der Compiler liefert mir jetzt folgenden Spruch:
tom@debian:~/eigene dateien/Programmieren/qt-kde Programmierung/openGL$ make g++ -c -pipe -Wall -W -O2 -DQT_NO_DEBUG -DQT_SHARED -DQT_THREAD_SUPPORT -I/usr/share/qt3/mkspecs/default -I. -I. -I/usr/include/qt3 -o main.o main.cpp main.cpp: In constructor `MyWidget::MyWidget(QWidget*, char*)': main.cpp:33: `class NavigationWidget' has no member named `rotWidget' make: *** [main.o] Error 1
Entweder ich benutz hier C++ falsch, oder der Compiler spinnt. Ich hab doch ein rotWidget in NavigationWidget erzeugt.
Über Hilfe würde ich mich sehr freuen.
mfg
tom
-
`class NavigationWidget' has no member named `rotWidget'
Yo, wie der Compiler korrekt sagt, hast du kein rotWidget in deiner Klasse als MEMBER! Du hast das rotWidget zwar im Konstruktor instanziert, aber sobald der Konstruktor verlassen wird, ist deine Instanz auch flöten gegangen.
Also, leg doch einfach mal ein Member, sprich Variable, in deiner class-Deklaration an.
class NavigationWidget { public: RotationWidget *rotWidget; // OK, müsste eigentlich private sind, aber du // willst ja public drauf zu greifen, laut deinem Bsp. };
In deinem Konstruktor:
NavigationWidget::NavigationWidget() { rotWidget = new RotationWidget(qBox); }
-
Okay, ich hab den Code mal abgeändert. Nun spuckt der Compiler mir aber folgendes aus:
tom@debian:~/eigene dateien/Programmieren/qt-kde Programmierung/openGL$ make g++ -c -pipe -Wall -W -O2 -DQT_NO_DEBUG -DQT_SHARED -DQT_THREAD_SUPPORT -I/usr/share/qt3/mkspecs/default -I. -I. -I/usr/include/qt3 -o main.o main.cpp In file included from navigationwidget.h:2, from main.cpp:8: rotationwidget.h:12: syntax error before `protected' make: *** [main.o] Error 1
Wieso redet der nun was von protected ? Das hab ich doch nirgends in rotationwidget.h benutzt !
Hier mal die betreffende Headerdatei als Source:
#include <qwidget.h> #include <qslider.h> #define null NULL class RotationWidget : public QWidget { public: RotationWidget(QWidget* parent = null, char* name = null); QSlider* qSlider; public signals: void sendAngle(int); };
Kann mir da einer weiterhelfen ?
mfg
tom
-
public signals: // <-- HIER, er hat doch Zeile 12 gesagt! void sendAngle(int);
Was soll das signals bewirken???
-
ach Mist bin ich blöd. Jetzt hab ich voll gepennt. Das war noch ein Rest meiner ersten Idee, die ich dann sofort nachdem ich diese Zeilen geschrieben hab, wieder verworfen hatte. Hab halt nur vergessen das aus dem Code zu löschen. Aber warum redet der Compiler was von protected ???
Naja, trotzdem super vielen Dank für die tolle und schnelle Hilfe
mfg
tom