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 🙄


Anmelden zum Antworten