QML QtCharts CandlestickSeries.append() 返回 false

如何解决QML QtCharts CandlestickSeries.append() 返回 false

尝试通过 JavaScript 填充 CandlestickSeries(数据来自自定义 QObject dataProvider):

Connections {
    target: dataProvider
    function onDataChanged() {
        for(var i = 0; i < dataProvider.data.length; i++) {
            var x = dataProvider.data[i]
            var jsobj = {timestamp: x.timestamp,open: x.open,high: x.high,low: x.low,close: x.close}
            if(!serie1.append(jsobj))
                console.log('append failed:',JSON.stringify(jsobj))
        }
    }
}

ChartView {
    title: "Candlestick Series"
    width: 400
    height: 300

    CandlestickSeries {
        id: serie1
        name: "Acme Ltd."
        increasingColor: "green"
        decreasingColor: "red"
    }
}

对每个数据点调用 .append() 都失败:

qml: append failed: {"timestamp":1514764800,"open":11993.6,"high":11995.2,"low":11676,"close":11807.6}
qml: append failed: {"timestamp":1514768400,"open":11807.5,"high":11908.4,"low":11501,"close":11561.1}
qml: append failed: {"timestamp":1514772000,"open":11561.1,"high":11700,"low":11423.5,"close":11648.6}
qml: append failed: {"timestamp":1514775600,"open":11620.6,"high":11843.4,"low":11519.3,"close":11567.5}
qml: append failed: {"timestamp":1514779200,"open":11596.5,"high":11809.7,"low":11505.9,"close":11790.7}
qml: append failed: {"timestamp":1514782800,"open":11790.6,"high":11809.9,"low":11699.5,"close":11699.6}
qml: append failed: {"timestamp":1514786400,"open":11699.1,"high":11890.3,"low":11639.6,"close":11886.6}
qml: append failed: {"timestamp":1514790000,"open":11867.4,"high":11949.9,"low":11770.2,"close":11830.3}
qml: append failed: {"timestamp":1514793600,"high":11822.5,"low":11461.9,"close":11559.6}
qml: append failed: {"timestamp":1514797200,"open":11582.6,"high":11807.2,"low":11543.5,"close":11743.6}
qml: append failed: {"timestamp":1514800800,"open":11710.8,"high":11777,"low":11582.2,"close":11592.9}
qml: append failed: {"timestamp":1514804400,"open":11592.9,"high":11598,"low":11250,"close":11400.1}
qml: append failed: {"timestamp":1514808000,"open":11412.1,"high":11440,"low":11376.2,"close":11414.7}
qml: append failed: {"timestamp":1514811600,"open":11413.6,"high":11434.4,"low":11180.3,"close":11217.5}
qml: append failed: {"timestamp":1514815200,"open":11210.1,"high":11457.4,"low":11090,"close":11410}
qml: append failed: {"timestamp":1514818800,"open":11457.2,"high":11470,"low":11300.1,"close":11437.9}
qml: append failed: {"timestamp":1514822400,"open":11426.5,"high":11426.6,"low":11257.5,"close":11310.8}
qml: append failed: {"timestamp":1514826000,"open":11310.5,"high":11439.9,"low":11300,"close":11378.1}
qml: append failed: {"timestamp":1514829600,"open":11378,"close":11391.6}
qml: append failed: {"timestamp":1514833200,"open":11391.6,"high":11469.9,"low":11335,"close":11455.8}
qml: append failed: {"timestamp":1514836800,"open":11455.8,"high":11639,"low":11360,"close":11434.1}
qml: append failed: {"timestamp":1514840400,"open":11455,"high":11588,"low":11434,"close":11498.9}
qml: append failed: {"timestamp":1514844000,"open":11495.6,"high":11508,"low":11346.2,"close":11448.3}
qml: append failed: {"timestamp":1514847600,"open":11448.1,"high":11460,"close":11359}

如何动态填充 CandlestickSeries

注意:我也试过 an alternative approach using Repeater,但也失败了。

解决方法

尝试为我想显示的数据生成整个 QML 代码,然后使用 Qt.createQmlObject() 动态创建它(是的,我知道,可怕的解决方案):

function onDataChanged() {
    var qml = 'import QtQuick 2.15\nimport QtCharts 2.15\n\nCandlestickSeries {\n    name: "HelloWorld Ltd."\n    increasingColor: "green"\n    decreasingColor: "red"\n\n'
    for(var i = 0; i < dataProvider.data.length; i++) {
        var x = dataProvider.data[i]
        qml += '    CandlestickSet { timestamp: ' + (x.timestamp * 1000) + '; open: ' + x.open + '; high: ' + x.high + '; low: ' + x.low + '; close: ' + x.close + ' }\n'
    }
    qml += '}\n'
    var series = Qt.createQmlObject(qml,chart,'dyn')
    if(series == null) {
        console.log("Error creating series")
        return
    }
}

它不起作用(没有错误)。

但是如果我打印生成的 QML 代码,然后修改我的静态 QML 代码以添加生成的 QML,它就可以工作了。

真的很奇怪

,

您可能不再需要这个了,但我已经找到了解决方案。您需要做的是使用 Qt.createQmlObject 创建 CandlestickSet 的整个对象,将其附加到 CandlstickSeries 并创建和分配轴。以下代码将起作用:

    var newObject = Qt.createQmlObject(
                "import QtQuick 2.0; " +
                "import QtCharts 2.2; " +
                "CandlestickSet {" + 
                    "timestamp: " + timestamp +
                    "; open: " + open +
                    "; high: " + high +
                    "; low: " + low +
                    "; close: " + close +
                "}",candlestickSeries);
    qmlObjects.push(newObject); //Array holding created objects to destroy them when not needed anymore to prevent a memory leak
    candlestickSeries.append(newObject);
    candlestickSeries.axisX = Qt.createQmlObject(
        "import QtQuick 2.0; " +
        "import QtCharts 2.2; " +
        "DateTimeAxis {" + 
            "min: new Date(" + x_min + ")" +
            "; max: new Date(" + x_max + ")" +
        "}",candlestickSeries);
    candlestickSeries.axisY = Qt.createQmlObject(
        "import QtQuick 2.0; " +
        "import QtCharts 2.2; " +
        "ValueAxis {" + 
            "min: " + y_min +
            "; max: " + y_max +
        "}",candlestickSeries);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-