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 Widget Based Application与 Qt Quick Application的区别?