Qt Quick ui 表单不支持函数

Posted

技术标签:

【中文标题】Qt Quick ui 表单不支持函数【英文标题】:functions are not supported in Qt Quick ui form 【发布时间】:2017-12-10 18:21:52 【问题描述】:

我试图在我的 Qt Quick 应用程序中打开一个链接,我收到 functions are not supported in Qt Quick ui form 警告,应用程序正常工作,我想摆脱警告,如何解决这个警告?

AboutForm.ui.qml文件

Text 
    id: license
    x: 40
    y: 207
    color: "#ffffff"
    text: qsTr("<a href='https://www.gnu.org/licenses/old-licenses/gpl-2.0.html'>GNU General Public License, version 2 or later</a>")
    font.pixelSize: 16
    // the editor complains about this function
    onLinkActivated: Qt.openUrlExternally("https://www.gnu.org/licenses/old-licenses/gpl-2.0.html")

    MouseArea 
        anchors.fill: parent
        acceptedButtons: Qt.NoButton
        cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
    

而我的About.qml 文件是空的。

import QtQuick 2.4

AboutForm 


【问题讨论】:

【参考方案1】:

根据docs:

您可以使用 Qt Creator 向导创建文件扩展名为 .ui.qml 的 UI 表单。 UI 表单包含 QML 语言的纯声明性子集。建议您在设计模式下编辑表单。但是,将项目导出为别名属性只是商业功能,因此如果您使用的是 Qt Creator 的开源版本,则必须使用编辑模式来执行此操作。 Qt Creator 通过显示错误消息来强制使用支持的 QML 功能。

不支持以下功能:

javascript 块 函数定义 函数调用(qsTr 除外) 纯表达式以外的其他绑定 信号处理程序 根项以外的其他项中的状态 不是从 QQuickItem 或 Item 派生的根项目

不支持以下类型:

行为 绑定 帆布 组件 着色器效果 定时器 变换 过渡

我建议的解决方案是通过以下方式抑制警告:

// @disable-check M222
onLinkActivated: Qt.openUrlExternally(
                     "https://www.gnu.org/licenses/old-licenses/gpl-2.0.html")

参考资料:

https://forum.qt.io/topic/66429/what-is-sign-in-disable-check-m16 http://doc.qt.io/qtcreator/creator-checking-code-syntax.html#list-of-javascript-and-qml-checks

【讨论】:

【参考方案2】:

关于Form.ui.qml

// add this:    
property alias license: license    

Text 
        id: license
        x: 40
        y: 207
        color: "#ffffff"
        text: qsTr("<a href='https://www.gnu.org/licenses/old-licenses/gpl-2.0.html'>GNU General Public License, version 2 or later</a>")
        font.pixelSize: 16
        // Remove this line


    MouseArea 
        anchors.fill: parent
        acceptedButtons: Qt.NoButton
        cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
    

关于.qml

import QtQuick 2.4

AboutForm 
     // add this line
     license.onLinkActivated: Qt.openUrlExternally("https://www.gnu.org/licenses/old-licenses/gpl-2.0.html")

【讨论】:

【参考方案3】:

Qt Quick UI Form 应该是一个只有可见元素的 QML 文件。这里没有展示业务逻辑 (Qt-forum)。

当您使用 Qt Creator 创建 Qt Quick UI 表单时,它将创建两个文件:

    YourItemForm.ui.qml YourItem.qml

YourItem.qml:

YourItemForm 
  button1 
    text: data_provider.get("button_text")
  

YourItemForm.ui.qml:

Item 
  property alias button1 : button1 
  Button 
    id: button1
  

【讨论】:

【参考方案4】:

我建议从 main.qml 打开外部链接,而不是从 UI 本身打开。

在 AboutForm.ui.qml 添加

属性 int externalcall:1

        MouseArea 
            id: mousearea
            anchors.fill: parent
            drag.target: parent
            onClicked: externalcall=2
        

然后在 main.qml 应用程序窗口中创建一个 on externalcall 更改并在此函数中打开链接。如果不清楚,请告诉我举个例子。

【讨论】:

以上是关于Qt Quick ui 表单不支持函数的主要内容,如果未能解决你的问题,请参考以下文章

Qt Quick 和 Widgets 的对比

Qt Widget Based Application与 Qt Quick Application的区别?

组织孩子的 Qt Quick2 自定义控件

动态重新翻译 Qt Quick UI

23.Quick QML-简单且好看的图片浏览器-支持多个图片浏览缩放旋转滑轮切换图片

由于找不到qt5quick.dll,无法继续执行代码。重新安装程序可能会解决此问题,不知道怎么解决跪求大神帮忙