Widgets alle xSekunden aktualisieren?

Alles rund um die Programmierung mit Qt
Antworten
double
Beiträge: 7
Registriert: 19. Dezember 2015 01:19

Widgets alle xSekunden aktualisieren?

Beitrag 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ß
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Widgets alle xSekunden aktualisieren?

Beitrag von Christian81 »

Schau Dir mal QTimer an.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
double
Beiträge: 7
Registriert: 19. Dezember 2015 01:19

Re: Widgets alle xSekunden aktualisieren?

Beitrag 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
double
Beiträge: 7
Registriert: 19. Dezember 2015 01:19

Re: Widgets alle xSekunden aktualisieren?

Beitrag 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
Antworten