gpt4 book ai didi

c++ - 如何重新绘制 QChart

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:21 24 4
gpt4 key购买 nike

我想知道如何在将新点附加到添加到 QLineSeries 之后重绘 QChart目标是使用它来显示以高速率(高达 400 000 点/秒)获取的数据,并在点以数据包形式到达时更新绘图。

这是我一直在做的测试程序:

主窗口:

class MainWindow : public QMainWindow{
Q_OBJECT

QLineSeries *series;
QChart *chart;
QChartView *chartView;

int cnt=0;


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

private slots:
void on_pB_Start_clicked();

private:
Ui::MainWindow *ui;
};

主窗口构造函数:

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

series = new QLineSeries();

chart = new QChart();
chart->setBackgroundRoundness(0);

chart->addSeries(series);

// A bunch of formatting
chart->setBackgroundVisible(false);
chart->setMargins(QMargins(0,0,0,0));
chart->layout()->setContentsMargins(0,0,0,0);
chart->legend()->hide();
chart->setPlotAreaBackgroundBrush(QBrush(Qt::black));
chart->setPlotAreaBackgroundVisible(true);
chartView = new QChartView(chart);
ui->gridLayout->addWidget(chartView);

}

还有一个 pushButton clicked 事件来为系列添加点:

void MainWindow::on_pB_Start_clicked(){
series->append(cnt,qSin(cnt/10));
cnt++;
// Update plot here << ======== HOW?
}

OpenGLSeries 示例以某种方式做到了这一点。我不明白怎么办。但这种情况有点不同,因为它用新点替换系列中的所有点,而不是附加它们。

最佳答案

显然 QCharts 不需要 repaint()。向系列添加新点似乎就足够了。我没有看到数据,因为我没有为 char 设置轴,也因为没有正确计算值。

更正后的代码:

标题:

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

series = new QLineSeries();

chart = new QChart();
chart->addSeries(series);

chart->createDefaultAxes(); // Preparing the axis
chart->axisX()->setRange(0,10);
chart->axisY()->setRange(0,10);

// Same formatting
chart->setBackgroundVisible(false);
chart->setMargins(QMargins(0,0,0,0));
chart->layout()->setContentsMargins(0,0,0,0);
chart->legend()->hide();
chart->setPlotAreaBackgroundBrush(QBrush(Qt::black));
chart->setPlotAreaBackgroundVisible(true);
chartView = new QChartView(chart);
ui->gridLayout->addWidget(chartView);
}

还有 pushButton 代码,在计算之前将 cnt 转换为 double。

void MainWindow::on_pB_Start_clicked(){
double val = 3*(qSin((double)cnt*2)+2);
series->append(cnt,val); // Enough to trigger repaint!
cnt++;
}

关于c++ - 如何重新绘制 QChart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38804179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com