Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

New QML errors thrown since 5.12.2



  • Hi!

    I upgraded to Qt 5.12.2 this weekend, and have since then error messages from QML all over my program.
    I think I identified the cause of the messages to be the assignment of JS variables to C++ properties from QML.., but I'm not sure that it's the real underlying reason, nor why that would be an issue, given that it's a pretty standard thing to do IMHO.

    The error message looks like this:

    "onTriggered@qrc:/qml/Main.qml:54"
    "Passing incompatible arguments to C++ functions from JavaScript is dangerous and deprecated."
    "This will throw a JavaScript TypeError in future releases of Qt!"
    

    I tried to isolate the issue on a simple test scenario but didn't succeed in reproducing the error...

    Does anyone encountered this error before? is there an easy fix for this?

    Thanks in advance for your kind replies!



  • hi
    @lagarkane said in New QML errors thrown since 5.12.2:

    but I'm not sure that it's the real underlying reason
    ..
    "onTriggered@qrc:/qml/Main.qml:54"

    what do you have in Main.qml at line 54 ?
    is this Felgo app?



  • Thanks for your reply @LeLev , Here's my Main.qml:

    import QtQuick 2.0
    import QtQuick.Controls 2.4
    import QtQuick.Layouts 1.0
    import QtQuick.Dialogs 1.1
    import SofaScene 1.0
    import SofaApplication 1.0
    import SofaViews 1.0
    import SofaBasics 1.0
    
    ApplicationWindow {
        id: root
        width: 1280
        height: 720
        title: Qt.application.name + " - \"" + sofaScene.path + "\""
    
        onClosing: Qt.quit()
    
        property var sofaScene: SofaScene {
            id: sofaScene
    
            // delay the opening of the previous scene to the next frame to let a chance to parse command line arguments specifying another scene
            property var openPreviousTimer: Timer {
                running: true
                repeat: false
                interval: 1
    
                onTriggered: {
                    if(SofaScene.Null !== sofaScene.status)
                        return;
    
                    var source = SofaApplication.sceneSettings.mostRecent();
                    if(0 === source.length)
                        source = "file:Demos/caduceus.scn";
    
                    sofaScene.source = source; /// line 54
                }
            }
        }
    
    

    SofaScene is a C++ Q_OBJECT, and sofaScene.source is a Q_PROPERTY or type QString. mostRecent() is a javascript function returning a string.

    This is not Felgo, It's a desktop application for an open-source project called SOFA.

    This error shows up at many places, incl. sometimes without any traceable callstack, such as this one:

    Could not convert argument 2 at
    expression for index@file:///opt/Qt/5.12.2/gcc_64/qml/QtQuick/Controls/Private/TreeViewItemDelegateLoader.qml:84
    Passing incompatible arguments to C++ functions from JavaScript is dangerous and deprecated.
    This will throw a JavaScript TypeError in future releases of Qt!
    

    Looking at TreeVieewItemDelegateLoader.qml, line 84:
    readonly property var index: model ? model["_q_TreeView_ModelIndex"] : __treeModel.index(-1,-1,null)
    I guess that could be caused by it being from a deprecated QtQuick.Controls 1.X component..


  • Moderators

    @lagarkane my guess is, because you handle the string? that the c++ backend returns as a ‚var.

    does the warning go away if you pass it explicitly as string, via toString() ?



  • Same occurs with latest 5.13.0 beta release
    TreeView component is affected with such behavior
    Even the samples provided with the SDK throws this issue.
    It has a performance impact when debugging a huge tree.



  • @lagarkane said in New QML errors thrown since 5.12.2:

    Passing incompatible arguments to C++ functions from JavaScript is dangerous and deprecated

    Issue reported here: https://bugreports.qt.io/browse/QTBUG-74523
    You can vote for this issue.



  • I am seeing a similar error, but I cannot track it down. The error is cropping up in a private qml file:

    "Could not convert argument 2 at"
    	 "expression for index@file:///opt/Qt/5.12.2/gcc_64/qml/QtQuick/Controls/Private/TreeViewItemDelegateLoader.qml:84"
    "Passing incompatible arguments to C++ functions from JavaScript is dangerous and deprecated."
    

    Is there a way to get a better stacktrace of this?

    Edit: Somehow I got a better trace:

    "Could not convert argument 2 at"
    	 "expression for index@file:///opt/Qt/5.12.2/gcc_64/qml/QtQuick/Controls/Private/TreeViewItemDelegateLoader.qml:84"
    	 "insertColumn@file:///opt/Qt/5.12.2/gcc_64/qml/QtQuick/Controls/Private/BasicTableView.qml:262"
    	 "addColumn@file:///opt/Qt/5.12.2/gcc_64/qml/QtQuick/Controls/Private/BasicTableView.qml:236"
    	 "expression for onCompleted@file:///opt/Qt/5.12.2/gcc_64/qml/QtQuick/Controls/Private/BasicTableView.qml:358"
    	 "__loadElement@file:///opt/Qt/5.12.2/gcc_64/qml/QtQuick/Controls/StackView.qml:825"
    	 "__performTransition@file:///opt/Qt/5.12.2/gcc_64/qml/QtQuick/Controls/StackView.qml:911"
    	 "push@file:///opt/Qt/5.12.2/gcc_64/qml/QtQuick/Controls/StackView.qml:605"
    	 "expression for onLoginComplete@qrc:/startup.qml:96"
    	 "onAccepted@qrc:/Login.qml:209"
    	 "expression for onAccepted@file:///opt/Qt/5.12.2/gcc_64/qml/QtQuick/Controls/TextField.qml:668"
    "Passing incompatible arguments to C++ functions from JavaScript is dangerous and deprecated."
    "This will throw a JavaScript TypeError in future releases of Qt!"
    

    The call that starts this:

    startup_stack.push({item: main_view, replace : true});
    

    startup_stack is a StackView
    main_view is a Component with custom objects defined inside it

    I don't see a second argument here.

    Edit:
    Here is the offending line from the delegate file:

    readonly property var index: model ? model["_q_TreeView_ModelIndex"] : __treeModel.index(-1,-1,null)
    

    The error shows:

    expression for index@file:///opt/Qt/5.12.2/gcc_64/qml/QtQuick/Controls/Private/TreeViewItemDelegateLoader.qml:84
    

    Well the second parameter is a constant provided by the Qt qml file. Does this mean we have a problem with a custom index somewhere? Or is Qt complaining about itself?


Log in to reply