Qt Quick ui表格不支持这些功能

时间:2017-12-10 18:21:52

标签: c++ qt qtquick2

我试图在我的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 {

}

3 个答案:

答案 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表单时,它将创建两个文件:

  1. YourItemForm.ui.qml
  2. YourItem.qml <---这包括逻辑。

YourItem.qml

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

YourItemForm.ui.qml

Item {
  property alias button1 : button1 
  Button {
    id: button1
  }
}