- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想让我的 QChart 在一个点被添加到附加到它的 QLineSeries 对象时动态更新,但似乎这个更新只发生在我正在运行的 while 循环完成之后。我在 interface.cpp 中使用所说的 while 循环调用函数 updatePlot() 将数据点添加到线系列,但这只会在 while 循环完全完成后更新图表。这里发生的伪代码:
qtwindow.cpp
// Constructor that initializes the series which will be passed into the interface
AlgoWindow::AlgoWindow( ..., TradingInterface* interface, ... ) {
...
QLineSeries* series = new QLineSeries();
QLineSeries* benchmark = new QLineSeries();
QChart* chart = new QChart();
chart->addSeries(series);
chart->addSeries(benchmark);
// Also creates custom axes which are attached to each series
...
}
// Slot connected to a button signal
void AlgoWindow::buttonClicked() {
// Runs the backtest
interface->runbacktest(..., series, benchmark, ...);
}
接口(interface).cpp
void TradingInterface::runbacktest(..., QtCharts::QLineSeries* algoplot, QtCharts::QLineSeries* benchplot) {
// Runs a huge while loop that continuously checks for events
while (continue_backtest) {
if (!eventsqueue.isEmpty()) {
// Handle each event for the bar
} else {
// All events have been handled for the day, so plot
updatePlot(algoplot, benchplot);
}
}
}
void TradingInterface::updatePlot(QtCharts::QLineSeries *algoseries,
QtCharts::QLineSeries *benchseries) {
// Get the date and the information to put in each point
long date = portfolio.bars->latestDates.back();
double equitycurve = portfolio.all_holdings.rbegin().operator*().second["equitycurve"];
double benchcurve = benchmarkportfolio.all_holdings.rbegin().operator*.second["equitycurve"];
// Append the new points to their respective QLineSeries
algoseries->append(date * 1000, equitycurve*100);
benchseries->append(date * 1000, benchcurve*100);
}
这没有给我任何错误并且 while 循环完成,但线条仅在 runbacktest() 退出后绘制。然后它会正确绘制所有数据,但一次绘制。
我需要做的是在每次添加行时更新 QChart,我猜这是使用某种形式的自定义信号槽监听器,但我不知道如何去做。如果图表在函数完成后才会更新,甚至可以在 QChart 框架内实现吗?
此外,我已经尝试过 QChart::update() 和 QChartView::repaint()。两者都产生了相同的结果。
编辑: 我尝试设置一个新线程,只要数据完成,它就会向主线程发出信号,但它似乎没有任何改变。在输入所有数据之后,QChart 仍然不会更新。我添加了几行来帮助调试,看起来发出信号的函数运行得很好,但是接收信号的槽函数只在线程完成后运行。不仅如此,通过 sleep 减慢信号速度并不会使其绘制缓慢(就像我想的那样),因为 QChart 仍然拒绝更新,直到最终更新到 addData() 之后。
最佳答案
要么删除您的 while 循环并使用计时器一次执行一个步骤。
或者在另一个线程中运行您的 runbacktest
函数,并在数据准备就绪时发送信号以更新 UI 线程中的 QChart
。
无论哪种方式,您都需要将控制权交还给事件循环,以便重新绘制图表。
关于c++ - 在运行的 while 循环中从 QLineSeries 更新 QChart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50996127/
我有一个为给定数据绘制烛台的类(class)。我正在尝试在收到新数据后立即动态更新绘图。以不规则的间隔接收数据。 我可以使用什么机制让类(class)知道是时候更新绘图并根据新接收的数据点更新绘图?
我有这段代码,它适用于最大 1000 的数据大小。现在我用 65536 个点对其进行了测试。 series = new QLineSeries(); QList points; points.rese
我有这段代码,它适用于最大 1000 的数据大小。现在我用 65536 个点对其进行了测试。 series = new QLineSeries(); QList points; points.rese
我有一个 2Y 轴图,在 y1 上有一个 QValueAxis,在 y2 上有一个 QLogValueAxis。 显示线性图,未显示对数图。两者的数据是一样的。 我想知道如何设置对数轴的刻度和限制?
我想知道如何在将新点附加到添加到 QLineSeries 之后重绘 QChart。目标是使用它来显示以高速率(高达 400 000 点/秒)获取的数据,并在点以数据包形式到达时更新绘图。 这是我一直在
本文主要介绍了Qt QChart 创建图表,分享给大家,也给自己留个笔记,废话不多说,具体如下: 效果 流程 代码 1. 饼图 // 保存多个扇形QList<QPieSl
使用 Zoom Line Example我做了一个 Python QChartView可以使用箭头键滚动并使用加号和减号键缩放的类。 (见下面我的代码)。 当我向左滚动时,我希望网格线和轴刻度滚动与数
我使用pyqt5绘制一个简单的图表,需要添加自定义轴,但是当我添加轴时,图表不显示它,当悬停信号发出时,我需要显示相应的点,但它也没有显示,需要点击才能显示。 class Demo(QChartVie
我必须创建一个图表并使用 QChart。所以我查看了 QChart 动态样条示例(因为我要创建一个动态图表),我在那里发现了一些奇怪的东西。 下面是启动屏幕。除setTickCount()外,代码为Q
我正在编写一个应用程序。在 QT c++ 中并有以下问题:单击 qchart 图的轴(不在图本身)时是否可以捕获鼠标事件? 我试图覆盖axes实例的事件方法,但是没有调用事件方法.. 我还尝试使用 Q
我正在尝试在单击 QChart 的位置绘制一个点。为此,我创建了一个“ChartWidget”类,它继承了 QChart 并像这样覆盖了 paint 方法: void ChartWidget::pai
我想生成一个包含文本和 QChart 的 pdf 报告。我目前使用 QTextDocument 并将图表作为图像添加到其中,然后我使用 QPdfWriter 导出为 pdf。 #include #i
我想在 ChartView 的右侧放置第二个 ValueAxis。 documentation指出“轴可以放置在图表的下、上、左或右。” 但是,我在 AbstractAxis、ValueAxis 或
我想在 ChartView 的右侧放置第二个 ValueAxis。 documentation指出“轴可以放置在图表的下、上、左或右。” 但是,我在 AbstractAxis、ValueAxis 或
我能够得到 QChart.js可以毫无问题地使用饼图(以及极坐标图和圆环图),但是每当我尝试创建折线图(以及雷达图和条形图)时,我都会收到以下错误: TypeError: Cannot read pr
QtCharts 组件是QT中提供图表绘制的模块,该模块可以方便的绘制常规图形,Qtcharts 组件基于GraphicsView模式实现,其核心是QChartView和QChart的二次封装版。
我正在开发数据分析软件,该软件从远程数据库获取数据并将其放入QTableWidget中。我怎样才能有效地从表中获取这些数据并将它们放入QChart中? 我发现,如果我一直使用QTableView,它可
我正在尝试使用 QScatterSeries 绘制 numpy 数组,但是仅更新轴并且不显示点。我不确定为什么它不起作用。 projectionwindow.py from PySide2.QtCor
我想让我的 QChart 在一个点被添加到附加到它的 QLineSeries 对象时动态更新,但似乎这个更新只发生在我正在运行的 while 循环完成之后。我在 interface.cpp 中使用所说
我尝试交叉编译 qt chart example对于 yocto platform .我按照以下步骤编译我的 qt 程序: 来源/opt/myimage/2.1.2/environment-setup
我是一名优秀的程序员,十分优秀!