我试图在我的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 {
}
答案 0 :(得分:0)
根据docs:
您可以使用Qt Creator向导创建文件扩展名为.ui.qml的UI表单。 UI表单包含QML语言的纯声明子集。建议您在设计模式下编辑表单。但是,将项目作为别名属性导出是仅限商业用途的功能,因此如果您使用的是Qt Creator的开源版本,则必须使用“编辑”模式执行此操作。 Qt Creator通过显示错误消息来强制使用支持的QML功能。
不支持以下功能:
- JavaScript阻止
- 功能定义
- 函数调用(qsTr除外)
- 除纯表达式之外的其他绑定
- 信号处理程序
- 除根项目以外的其他项目的状态
- 不是从QQuickItem或Item
派生的根项目不支持以下类型:
- 行为
- 结合
- 帆布
- 组件
- 着色器效果
- 定时器
- 变换
- 过渡
我建议的解决方案是使用以下内容来抑制警告:
class a {
public:
a(int v) : v(v) {};
int v;
};
class b : public a {
public:
b(int v) : a(v) {};
};
class c : public a {
public:
c(int v) : a(v) {};
};
a nullelem0(1);
b nullelem1(1);
template <typename _Tp, _Tp n>
class h
{
public:
bool isnull(_Tp a) { return a == n; }
};
int main(int argc, char **argv) {
h<a *, &nullelem0> n0;
c p1(2);
n0.isnull(&nullelem0);
n0.isnull(&p1);
/* this one fails: */
h<a *, &nullelem1> n1;
return 0;
}
参考文献:
答案 1 :(得分:0)
AboutForm.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
}
}
About.qml
import QtQuick 2.4
AboutForm {
// add this line
license.onLinkActivated: Qt.openUrlExternally("https://www.gnu.org/licenses/old-licenses/gpl-2.0.html")
}
答案 2 :(得分:0)
Qt快速UI表单应该是仅包含可见元素的QML文件。此处(Qt-forum)上没有业务逻辑。
使用Qt Creator创建Qt快速UI表单时,它将创建两个文件:
YourItem.qml
:
YourItemForm {
button1 {
text: data_provider.get("button_text")
}
}
YourItemForm.ui.qml
:
Item {
property alias button1 : button1
Button {
id: button1
}
}