Array in paintEvent
-
Hi,
ich bekomme immer sonen merkwürdigen Fehler in 'virtual void Klasse::paintEvent(QPaintEvent *event)' , wenn ich eine Methode aus einem Array(aus QPoints) aufrufen will:
'no match for 'operator[] in p[i]' .
Die Code_Zeile sieht so aus:int s=p[i].x();
In anderen Methoden der Klasse "Klasse" wird keine Fehlermeldung produziert.
Der einzige Unterschied der mir auffällt ist das paintEvent virtual und protected ist. Liegts vlt daran?
-
Wie ist "p" deklariert?
-
p ist public der Klasse "Klasse" und "nicht dynamisch" deklariert also:
... public: QPoint p[2]; ...
-
Dann brauchts mehr Info. Kannst du die ganze paintEvent + Klassendefinition + Fehlermeldung posten?
-
///////Klasse.h #include <QPainter> #include <QWidget> class ClassB; class ClassC; class Klasse : public QWidget { Q_OBJECT public: Klasse(QWidget *parent=0, ClassC *cC=0); ~Klasse(){}; void setPoints(QPoint *, int); public slots: void nextFrame(); signals: void STOP(); protected: void paintEvent(QPaintEvent *e); private: ClassB *cB; QString str; QPoint p[2]; int frames; int framesmax; int num; }; ////////Klasse.cpp #include "Klasse.h" #include "ClassC.h" #include "ClassB.h" Klasse::Klasse(QWidget *parent, ClassC *cC) :QWidget(parent) { cB = cC->retcB(); } void Klasse::nextFrame() { ++ frames; for(int i=0;i<2;++i) { p[i].setX((cB->getPointF(i,frames)).x()); p[i].setY((cB->getPointF(i,frames)).y()); } update(); if(!(frames<framesmax)) emit STOP(); } void Klasse::setPoints(QPoint * p, int i) { this->p[i].setX(p->x()); this->p[i].setY(p->y()); } void Klasse::paintEvent(QPaintEvent *e) { QPen pen(Qt::black,5,Qt::SolidLine); QPainter p; p.begin(this); p.setPen(pen); for(int i=0;i<2;++i) { int s=p[i].x(); str=QString::number(s); p.drawText(100+i*10,200+i*10,str); s=p[i].y(); str=QString::number(s); p.drawText(100+i*10,200+i*10,str); } p.end(); }
Error:
..\Test\Klasse.cpp: In member function 'virtual void Klasse::paintEvent(QPaintEvent*)': ..\Test\Klasse.cpp:31: error: no match for 'operator[]' in 'p[i]' ..\Test\Klasse.cpp:34: error: no match for 'operator[]' in 'p[i]' mingw32-make[1]: *** [debug/Klasse.o] Error 1 mingw32-make: *** [debug] Error 2
-
Weil im Kontext von paintEvent() "p" vom Typ QPainter ist.
Und QPainter kennt keinen operator[].
Entweder den QPainter oder den Member umbenenen, dann sollte es klappen.
-
Uhh verdammt. Vieelen Dank ich könnt schwören, dass ich in hundert Jahren nicht draufgekommen wäre