【问题标题】:Passing commandline argument to qml将命令行参数传递给 qml
【发布时间】:2019-10-12 20:24:36
【问题描述】:

我想从 linux shell 调用一个 qml-script 并传递一个文本作为参数,比如

./message.qml "hello this is a message"

/usr/bin/qt5/qml ./message.qml "hello this is a message"

qml 脚本应该显示该文本。

下面的示例 qml 脚本有效,但是显示的文本(“hello”)当然是静态的。是否可以在 qml 中查询命令行参数?

#!/usr/bin/qt5/qml

import QtQuick 2.2


Rectangle {
    width: 1024
    height: 600
    Text {
        anchors.centerIn: parent
        text: "Hello" // here I want to have a text which is set in the call
    }
    MouseArea {
        anchors.fill: parent
        onClicked: {
            Qt.quit()
        }
    }
}

【问题讨论】:

    标签: linux qt shell qml command-line-arguments


    【解决方案1】:

    您可以使用Qt.application.arguments 访问命令行参数,例如,如果我执行:

    /usr/bin/qml message.qml "hello this is a message"
    
    #!/usr/bin/qt5/qml
    
    import QtQuick 2.2
    
    
    Rectangle {
        width: 1024
        height: 600
        Text {
            anchors.centerIn: parent
            text: Qt.application.arguments[2] // here I want to have a text which is set in the call
        }
        MouseArea {
            anchors.fill: parent
            onClicked: {
                Qt.quit()
            }
        }
    }
    

    Qt.application.arguments[index] 中的索引可能会有所不同,具体取决于您调用 qml 执行的方式。

    【讨论】:

    • 这将引发qml 的错误/警告,它无法加载文件你好,这是一条消息,因为没有这样的文件 .为了忽略后续命令,您需要qml test.qml -- Hello./test.qml -- Hello。因此,如果您关心此错误,则必须使用参数号 3。如果您可以使用qml object.property=value test.qml 来改变行为,那就太好了。可以改用Qt.application.arguments
    猜你喜欢
    • 2015-06-09
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    相关资源
    最近更新 更多