【发布时间】:2018-10-27 19:45:23
【问题描述】:
我开始在我的应用程序中使用QtCharts。我正在考虑的图表是折线图,使用对象QChart 和QLineSeries。由于所有点都是动态添加的,所以我使用信号/槽系统来更新图表:
QLineSeries* serie = new QLineSeries(this);
connect(serie, SIGNAL(pointAdded(int)), this, SLOT(onPointAdded(int)));
void MyChart::onPointAdded(int index) {
// Delete the first items if the number of points has reached a threshold
while (serie->points().length() >= threshold)
serie->remove(0);
}
在serie(QLineSeries 对象)中添加点时调用函数onPointAdded。我给出的代码 sn-p 删除了serie 中的第一个点,例如图中的点数始终是固定的(开头除外)。
当我在Release 中运行这段代码时,没有问题。但是,当我在Debug 上运行它并且点数达到阈值时,我收到以下错误消息:
此对话框不会停止程序,但每次添加一个点(并达到阈值)时,都会在前一个对话框的顶部出现一个新对话框。
以下是重现错误的最少代码:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QChart>
#include <QLineSeries>
#include <QMainWindow>
#include <QValueAxis>
#include <QtCharts/QChart>
#include <QtCharts/QLineSeries>
QT_CHARTS_USE_NAMESPACE
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
QChart* chart = nullptr;
QLineSeries* serie = nullptr;
int threshold = 5;
private slots:
void onAddPointButtonClicked();
void onPointAdded(int index);
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent), ui(new Ui::MainWindow) {
ui->setupUi(this);
chart = new QChart;
serie = new QLineSeries(this);
connect(ui->bt_addPoint, SIGNAL(clicked()), this, SLOT(onAddPointButtonClicked()));
connect(serie, SIGNAL(pointAdded(int)), this, SLOT(onPointAdded(int)));
chart->legend()->hide();
chart->addSeries(serie);
ui->graphicsView->setChart(chart);
}
MainWindow::~MainWindow() {
delete ui;
}
void MainWindow::onAddPointButtonClicked() {
serie->append(0, 1);
}
void MainWindow::onPointAdded(int index) {
while (serie->points().length() >= threshold)
serie->remove(0);
}
我使用 UI 表单 来生成图形界面。此接口包含一个QChartView 和一个QPushButton(用于动态添加点)。
我的 Qt 版本是 5.11.2,并且该错误是使用 MSVC 2017 64-bits 产生的。使用QChart、QChartView和QLineSeries需要插件QtCharts。
我想知道是否可以解决此问题或禁用 Qt 调试对话框消息。
【问题讨论】:
-
很抱歉我给出的代码示例,无法重现代码。我编辑了帖子以添加我的项目的简化版本(我运行了这些文件,出现了消息框)。我希望这次更新会有所帮助。
-
因此,mcve 确实有助于追查问题。 ;)