Seite 1 von 1

Widgets alle xSekunden aktualisieren?

Verfasst: 22. April 2016 16:06
von double
Guten Tag,

ich möchte mit QT ein GUI erschaffen was mir mit Hilfe von QCustomplot verschiedene Daten visualisiert. Am Ende sollen die Daten aus einer Datenbank kommen, zum Testen nehme ich aber vorerst random Daten, spielt für die Frage aber auch nicht direkt eine Rolle sollte nur zur Info dienen.

Im Prinzip habe ich alles hinbekommen (verschiedene Plots auf dem Hauptfenster funktioniert prima) auf nur weiss ich nicht wie ich die Widgets allesamt im Intervall aktualisieren kann.
Hat vielleicht jemand einen Vorschlag wie man das machen kann, habe noch nicht so viel Erfahrung damit.

Ich hänge mal den Code an:

Code: Alles auswählen

// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>

namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void makePlot();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

Code: Alles auswählen

//main.cpp

#include "mainwindow.h"
#include <QApplication> // hier befinden sich die QT-klassen drin
#include <QLabel>
#include <QWidget>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv); // Instanz der klasse wird angelegt und kommandozeilenparameter übergeben.

    MainWindow w;
    w.show(); // anzeige

    return a.exec(); // startet event-schleife die ereignisse behandelt. rückgabewert ist auch rückgabewert für das programm.
}

Code: Alles auswählen

// mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    MainWindow::makePlot();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::makePlot()
{
    // Beispiel für eines der Widgets
    // generate some data:
    QVector<double> x(101), y(101); // initialize with entries 0..100
    for (int i=0; i<101; ++i)
    {
      x[i] = i/50.0 - 1; // x goes from -1 to 1
      y[i] = x[i]*x[i]; // let's plot a quadratic function
    }
    // create graph and assign data to it:
    ui->customPlot->addGraph();
    ui->customPlot->graph(0)->setData(x, y);
    // give the axes some labels:
    ui->customPlot->xAxis->setLabel("x");
    ui->customPlot->yAxis->setLabel("y");
    // set axes ranges, so we see all data:
    ui->customPlot->xAxis->setRange(-1, 1);
    ui->customPlot->yAxis->setRange(0, 1);
    ui->customPlot->replot();

   // usw...
   // danach kommen noch weiterer widgets mit ui->customPlot2, ui->customPlot3 usw.
}
Gruß

Re: Widgets alle xSekunden aktualisieren?

Verfasst: 22. April 2016 17:00
von Christian81
Schau Dir mal QTimer an.

Re: Widgets alle xSekunden aktualisieren?

Verfasst: 22. April 2016 17:37
von double
Hi ich habe versucht mit Hilfe einiger Beispiele QTimer einzubauen aber der Knoten ist bei mir noch nicht geplatzt, es funktioniert einfach nicht.
Ich habe versucht im header QTimer t; in private; zu setzen und in der mainwindow t.start(100); aber da ist etwas "incomplete". Die Abänderung des bestehenden Codes das selbiger per Timer mehrfach aufgerufen wird klappt nicht, weiss leider nicht wo ich konkret ansetzen muss.

lg

Re: Widgets alle xSekunden aktualisieren?

Verfasst: 22. April 2016 19:23
von double
Habs hinbekommen, mit SetIntervall und connect zum SLOT mit der Funktion :D
Musste noch an die QCustom Sachen jeweils ein replot hängen. Es verhält sich noch etwas merkwürdig weil die Farben und Skalierungen sich verändern aber da muss wohl evt noch was eingestellt werden was die Sache vor dem erneuten Anzeigen aufräumt. Ich bleibe dran...
lg