c++ - 使用别名和 C++ 集成在 .qml 中实现 .ui 文件的逻辑

标签 c++ qt qml qtquick2

我正在尝试connect the C++ class with QML但我无法在单独的 qml 文件中实现逻辑。当我直接在 ui.qml 文件中添加功能时,它可以工作,但我收到警告:

Functions are not supported in a Qt Quick UI form

我已经尝试过using alias但由于某种原因它不起作用。这是代码:

ReasonsForm.ui.qml:

import QtQuick 2.4
//import io.qt.UserDataProvider 1.0

MenuPage {
id: reasonsPage
property alias myReasons: myReasons

title: qsTrId("reasons")

Description {
    id: reasonsText
    text: qsTrId("reasons-text")
    anchors.bottomMargin: 150
}

//UserDataProvider{id:dataProvider}

MenuTextArea {
    id: myReasons
    text: qsTrId("aa")
    anchors.horizontalCenter: reasonsText.horizontalCenter
    anchors.top: reasonsText.bottom
    width: reasonsText.width
    //this actually works despite the warnings
    //onEditingFinished: dataProvider.saveInput("myReasons", text) 
}

ReasonsForm.qml:

import QtQuick 2.4
import io.qt.UserDataProvider 1.0

ReasonsForm {
    UserDataProvider{id:dataProvider}

    myReasons{
        onEditingFinished: dataProvider.saveInput("myReasons", text)
    }
}

编译器不会提示任何事情,但根本不会调用来自 dataProvider 的方法。非常感谢任何帮助。

编辑:我找到了一种解决方法,但它仍然无法解释为什么代码不起作用。使其在没有 qml 文件的情况下工作的方法是添加

Connections {   
        target: myReasons
        onEditingFinished: dataProvider.saveInput("myReasons", myReasons.text)
    }

到 ui 文件。 不过,我想将逻辑与用户界面分开。

编辑二:我误解了什么吗?看来别名对我来说根本不起作用。这是一个不执行任何操作的简单示例(按钮不执行任何操作):enter image description here

最佳答案

我终于能够修复它了。问题是我假设当拥有 ui.qml 和 .qml 文件时,它们已经连接(nameForm.ui.qml 和 name.qml)。需要做的是使用 .qml 文件来显示元素并将 .ui.qml 放入其中,因此在我的情况下我需要做的就是显示/包含 ReasonsForm.qml 文件我也想要 ui 文件的内容,因为 ui 已经显示在 qml 中,如下所示:

ReasonsForm {...

我正在显示 ReasonsForm.ui.qml ,假设这是图形界面,应该用作在 main.qml 或堆栈布局和 ReasonsForm 中显示的主要元素。 qml 只是附加逻辑。然而,首先需要显示的是 qml。

关于c++ - 使用别名和 C++ 集成在 .qml 中实现 .ui 文件的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54362022/

相关文章:

c++ - 限制套接字的最大速度

c++ - 如何在没有 QtXmlPatterns、QtSvg 和 QtSql 的情况下编译 QtDeclarative

linux - 虚拟表未生成

android - 应用程序在 android qtquick 中单击后退按钮时退出

c++ - 在 ROI 中使用 findContours,轮廓坐标错误

c++ - 为什么动态数组比静态数组慢

c++ - 好坏 : Calling destructor in constructor

c++ - 如何在 QComboBox 中显示文件夹 c++ 和 Qt 中的文件列表?

c++ - 无效的属性分配 : "displayText" is a read-only property in TextField qml

android - qt qml : deploying sqlite database to android using . qrc 文件不工作