Animation mit QTimer und painter klappt nicht

Alles rund um die Programmierung mit Qt
Antworten
dolin93
Beiträge: 45
Registriert: 5. Mai 2012 21:35

Animation mit QTimer und painter klappt nicht

Beitrag von dolin93 »

Hallo
weil ich gerne Lösungen f(x,t) einer partiellen Differentialgleichung graphisch darstellen würde, habe ich versucht, zuerst einmal sin(ax+ct) mit Hilfe des QTimers zu plotten, was aber nicht klappte, weil ich im Umgang mit dem QTimer keine Erfahrung hatte. Ich erhalte immer wieder die Fehlermeldung
/home/hans/Dokumente/Qt_Beispiele/Kurve12-build-desktop-Qt_4_8_1_in_Pfad__System__Release/../Kurve12/mainWidget.h:13: Fehler:expected unqualified-id before ')' token
die auf

Code: Alles auswählen

 void updateTime(float &ct);   
weist. Ich habe auch updateTime() probiert und das Programm immer wieder leicht verändert, aber gelaufen ist es nur, wenn ich die Zeitabhängigkeit beseitigte. Vielleicht kann mir jemand helfen, der sich mit dem Zusammenspiel von painter und QTimer auskennt.
Im Anhang befindet sich das Programm.
Dateianhänge
Kurve12.zip
(3.83 KiB) 280-mal heruntergeladen
frolle14
Beiträge: 4
Registriert: 16. August 2013 09:49

Re: Animation mit QTimer und painter klappt nicht

Beitrag von frolle14 »

Hi,

ich habe es nicht ausprobiert, aber deine Signal Slot Verbindung dürfte eigentlich nicht funktionieren:

connect(timer, SIGNAL(timeout()), this, SLOT(updateTime(ct))); geht nicht
connect(timer, SIGNAL(timeout()), this, SLOT(updateTime())); sollte gehen

deklarier ct mal als membervariable, dann brauchst du die adresse nicht übergeben.

und dann natürlich
void mainWidget::updateTime()
statt
void mainWidget::updateTime(float &ct).


Den painter-Kram habe ich mir noch nicht weiter angeschaut.

Gruß,
frolle
dolin93
Beiträge: 45
Registriert: 5. Mai 2012 21:35

Re: Animation mit QTimer und painter klappt nicht

Beitrag von dolin93 »

Vielen Dank für Deine Antwort!
Ohne ct, also nur mit updateTime, hatte ich es früher auch probiert. Ganz gleich, ob mit oder ohne ct, immer erhalte ich die angegebene Fehlermeldung, die je nach dem auf

Code: Alles auswählen

void updateTime(float &ct);
oder auf

Code: Alles auswählen

void updateTime();
weist.

Gruß,
dolin93
Zuletzt geändert von dolin93 am 5. März 2014 09:42, insgesamt 1-mal geändert.
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Re: Animation mit QTimer und painter klappt nicht

Beitrag von archer »

Schau mal in deinem Code in mainWidget.h Zeile 13 auf das Zeichen 511.
Da ist ein zuviel.
dolin93
Beiträge: 45
Registriert: 5. Mai 2012 21:35

Re: Animation mit QTimer und painter klappt nicht

Beitrag von dolin93 »

Vielen Dank für Deine Antwort!
In dieser Zeile steht bei mir nur

Code: Alles auswählen

 void updateTime(); 
. Hier kann eigentlich keine Klammer überflüssig sein. Wenn ich mit der Maus zwischen die Klammern zeige, dann wird
expected a declaration
angezeigt.
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Re: Animation mit QTimer und painter klappt nicht

Beitrag von archer »

In deinem Zip File in der header sieht es bei (start verkürzt) so aus.

Code: Alles auswählen

 void updateTime(float &ct);                                                                                                                                 );
Wie es bei dir jetzt im Code aussiht kann ich nicht sagen. Der code in dem zip-File hat
aber noch weitere Fehler.
dolin93
Beiträge: 45
Registriert: 5. Mai 2012 21:35

Re: Animation mit QTimer und painter klappt nicht

Beitrag von dolin93 »

Vielen Dank für Deine Antwort!
Wie ); in das kopierte und gezipte File gekommen ist, weiß ich nicht. Bei mir im Editor habe ich es vorher nie gesehen, sonst hätte ich es korrigiert, weil solche Fehler ja sehr leicht zu erkennen sind. Mein Problem ist halt das offensichtlich nicht funktionierende Zusammenspiel von QPainter und QTimer. Ich befürchte sogar, daß ich den QPainter und den QTimer in jeweils einer eigenen Klasse ansiedeln muß, also z.B. class Zeitgeber : QObject usw.
veeman
Beiträge: 280
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Animation mit QTimer und painter klappt nicht

Beitrag von veeman »

Die Funktion connect funktioniert nur mit den vom Objekt vordefinierten signalen, eine Parameter Übergabe funktioniert da nicht.
Die Angegebenen Parameter, falls vorhanden, werden automatisch vom Aufrufenden Objekt übergeben.
Du musst in dem Fall mit Membervariablen arbeiten.

An dieser Stelle ist es vielleicht Sinnvoll kein Timerobject zu erstellen und einfach nur singleShot verwenden.

Beispiel:

Header:

Code: Alles auswählen

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>

class MainWidget : public QWidget
{
	Q_OBJECT

public:
	MainWidget(QWidget *parent = 0);
	~MainWidget();

protected:
	void paintEvent(QPaintEvent *event);

public slots:
	void updateTime(); 

private:
	float ct;
};

#endif // MAINWIDGET_H
MainWidget:

Code: Alles auswählen

#include "mainwidget.h"
#include <QPainter>
#include <QTimer>

MainWidget::MainWidget(QWidget *parent)
	: QWidget(parent)
{
	setWindowTitle("paintEvent - Demo");
    resize(400, 400);
	ct = 0.0;

	QTimer::singleShot(20, this, SLOT(updateTime()));
}

MainWidget::~MainWidget()
{

}

void MainWidget::paintEvent(QPaintEvent * event)
{
    QPainter painter(this);

    double  zz[41],x0, x2,y0,y2;
    painter.setPen( QPen(Qt::blue, 2) );

    for(int j=0;j<40;j++)
    {
        zz[j]=200.0*(1+sin(3.1416*j/20.0+ct));
    }

    for(int j=1;j<39;j++)
    {
        x0=j*4.0+120;
        x2=(j+1)*4.0+120;
        y0=zz[j-1];
        y2=zz[j];
        painter.drawLine(x0,y0,x2,y2);
    }

    QPoint point=QPoint(150,100);
    painter.drawText(point,"Standbild");
   
    painter.setPen(QPen(Qt::black,1));

    for(int j=1;j<40;j++)
    {
        zz[j]=200.0*(1+sin(3.1416*j/20.0+ct));
    }

    for(int j=1;j<39;j++)
    {
        x0=j*4.0+20;
        x2=(j+1)*4.0+20;
        y0=zz[j-1];
        y2=zz[j];
        painter.drawLine(x0,y0,x2,y2);
    }
    painter.end();

	QTimer::singleShot(20, this, SLOT(updateTime()));
}

void MainWidget::updateTime()
{
    ct+=.01;
    update();
}
dolin93
Beiträge: 45
Registriert: 5. Mai 2012 21:35

Re: Animation mit QTimer und painter klappt nicht

Beitrag von dolin93 »

Vielen herzlichen Dank für Deine große Hilfe!
Jetzt läuft das Programm tadellos.

MfG
dolin93
Antworten