Ich bin noch ziehmlicher Neuling was Qt betriftt, darf aber ein Projekt damit machen. Hauptsächlich arbeite ich derzeit mit dem QT-Creator und der Version 4.6, und pfusche da im Code rum. Hier mein Problem:
Ich zeichne einen Zeiger auf ein Bild (ähnlich wie ein Tacho) und bewege diesen mit einer einfachen Routine. Per Timer wird alle 16 Milisekunden ein Update aufgerufen. Der Zeiger bewegt sich auch einwandfrei und flüssig.
Nur: die CPU-Auslastung liegt bei rund 70-80% und das bei einem ordentlichen PC. Später sollen 5 oder mehr dieser Zeiger dargestellt werden, doch schon bei 2 kommt es ordentlich zum ruckeln und die CPU ist voll ausgelastet. Gibt es vl. eine Ressourcenschonendere Variante das Programm zu realisieren?
Hier mal ein Codeschnippsel (das Zeiger-Bwegen hab ich mal weggelassen, da ich dies als Ressourcenfresser schon ausgeschlossen habe):
tacho::tacho(QWidget *parent)
: QMainWindow(parent), ui(new Ui::tacho)
{
ui->setupUi(this);
QPalette p = palette();
ui->centralWidget->setPalette(p);
ui->centralWidget->setStyleSheet("background-color: black");
QImageReader reader;
reader.setFileName("Bild.png");
ZeichenSicherung = reader.read();
Zeichenflaeche = ZeichenSicherung.copy(0,0,750,750);
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(16);
}
tacho::~tacho()
{
delete ui;
}
void tacho::paintEvent (QPaintEvent *event){
//Kopieren des leeren Bildes
Zeichenflaeche = ZeichenSicherung.copy(0,0,750,750);
QPainter painter (&Zeichenflaeche);
QPen pen(Qt::red, 1, Qt::SolidLine);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(QPen(QBrush("#575555"), 1));
//Zeiger zeichnen
painter.setPen(pen);
QPolygon polygon;
painter.translate(374,374);
painter.setBrush(QBrush(Qt::red, Qt::SolidPattern));
painter.drawEllipse(QPoint(0,0), 25, 25);
polygon << QPoint(0,-310) << QPoint(18,0) << QPoint(0,0) << QPoint(-18,0);
painter.rotate(winkel);
painter.drawPolygon(polygon, Qt::OddEvenFill);
painter.end();
//Fertiges Bild auf den Bildschirm kopieren - ich glaube das ist der Ressourcenfressenste Befehl
ui->Bild->setPixmap(QPixmap::fromImage(Zeichenflaeche));
}
Wird die Updatefrequenz auf das 3fache erhöht, also 50ms, sinkt die CPU-Auslastung auf rund rund 45%!
Über einen Denkanstoß wäre ich sehr dankbar.
MfG,
ossi