Je développe actuellement un petit programme en Qt. Pour afficher un graphique, vous pouvez utiliser qwt ou qcustomplot ou le qpainterevent ou QChart. Mais je suis interessé dans une solution pour un tracé dynamique qui est écrit avec le QGraphicsView.Qt | Création d'un graphique/tracé dynamique avec QGraphicsView, Scène QGraphics | données en temps réel
Mes préférences -width de mon tableau doivent être -realtime constante tracé -le premier échantillon doit être supprimé ou overwriten si la fin du graphique est atteint, il est donc un tableau dynamique et fluide
Mon exemple ci-dessous est capable d'être dynamique et fluide ... mais juste pour le nombre, qui est dans ma clause if. Je ne comprends pas pourquoi. L'idée est de supprimer le premier élément, donc j'ai constamment 99 éléments. Si je supprime un élément, je veux donner à l'élément suivant la position de l'élément avant. Alors x = 99 sera x = 98 ...... x = 1 sera x = 0;
Est-ce que j'ai une erreur dans mon idée? J'ai aussi eu plusieurs idées, mais c'est probablement le meilleur.
Merci à l'avance Konrad
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
scene = new QGraphicsScene(this);
ui->graphicsView->setScene(scene);
vectorPoint = new QVector<QPoint>;
line = new QVector<QGraphicsLineItem*>;
yDatai = 0;
xDatai = 0;
Grenzenlaufvariable = 0;
timer = new QTimer(this);
timer->start(10);
connect (timer, SIGNAL(timeout()),this,SLOT(newData()));
connect(this,SIGNAL(newPaint()),this,SLOT(paint()));
}
MainWindow::~MainWindow()
{
delete ui;
delete scene;
delete vectorPoint;
delete line;
}
void MainWindow::newData()
{
if (yDatai == 100 || yDatai == -100)
{
Grenzenlaufvariable++;
}
if (Grenzenlaufvariable%2==0)
{
yDatai+=1;
}
else
{
yDatai-=1;
}
xDatai++;
point = {xDatai,yDatai};
vectorPoint->append(point);
if(vectorPoint->size()>1)
{
item = scene->addLine(QLineF(vectorPoint->at(ix-1),vectorPoint->at(ix)));
line->append(item);
}
ix++;
emit newPaint();
}
void MainWindow::paint()
{
if(line->size()==99)
{
scene->removeItem(line->at(0));
line->removeAt(0);
qDebug()<<line->size();
for (int ip= 0;ip <line->size();ip++)
{
oldx = line->at(ip)->x();
line->at(ip)->setX(oldx-1);
qDebug()<<ip;
}
}
}
Vous pourriez me expliquer mieux. – eyllanesc
Où avez-vous besoin d'une meilleure explication? En ce que je veux de ce que j'ai codé? –