什么是标准(Qt)方法来创建单个ui.qml文件?

时间:2018-05-24 06:26:24

标签: qt qml qt-creator qtquick2 qtquickcontrols2

在Qt应用example中,他们使用单个*.ui.qml表单文件。我理解了所有内容,但我习惯于创建2个文件,例如Contact.qmlContactForm.ui.qml,而不是ContactForm.ui.qml。现在,如果我想创建这样的单个表单文件,我有/看到两个选项:

  1. 在创建标准的 QML文件(Qt Quick 2)时,我会提供名称和整个.ui.qml扩展名。

  2. 我创建 QtQuick Ui文件(创建2个文件)并删除一个(业务逻辑)文件。

  3. 对我来说,这两个选项似乎都是解决方法,而不是 Qt方式。你能告诉我 Qt方式吗?

2 个答案:

答案 0 :(得分:1)

(当然,如果您遵循角色see this post,则不仅可以在设计模式下打开.ui.qml,还可以打开任何qml文件。

中添加新时看到的向导列表是Qt可能认为足够且适合一般视角的标准向导。

Qt提供了一个解决方案虽然...您可以将自己的自定义向导添加到Qt Creator中的标准向导列表中,遵循Qt文档Adding New Custom Wizards创建过程,因此您可以向现有向导添加更多内容。

特别是仅针对.ui.qml(没有qml文件)创建,上述文档中的Adding JSON-Based Wizards部分工作得很好,例如:

  • 从命令行使用详细选项启动Creator: Qt_base\Tools\QtCreator\bin>qtcreator.exe -customwizard-verbose
  • 工具,选项,键盘 ...按 Factory.Reset 过滤并填写新的捷径,如果没有存在,例如Ctrl+Alt+F10
  • C:\ Qt \ Tools \ QtCreator \ share \ qtcreator \ templates \ wizards \ classes 文件夹中...复制用于创建.ui.qml qtquickui <的向导文件夹/ strong>并将其重命名为任何名称。
  • 现在最重要的是,在新文件夹中,编辑向导 json 文件以自定义新向导..

(1)在链接中描述新的id个角色

(2)在 options 下删除添加qml文件和表单的选项。

(3)在 pages 下,删除提示输入qml文件名的字段。

(4)在"name": "FormClass"部分中,将"trText": "%{Class}Form"修改为"trText": "Form"

(5)在 generators 下,删除qml文件生成器并保留.ui.qml文件生成器。

  • 编辑完成后,您现在可以激活新向导,按下上面创建的快捷方式(Ctrl+Alt+F10)就可以了!您现在应该在 Qt 部分添加新时看到您的新向导...

以下是 wizard.json

的修改版本
{
    "version": 1,
    "supportedProjectTypes": [ ],
    "id": "S.QtQuickUi",
    "category": "R.Qt",
    "trDescription": "Creates a Qt Quick Designer UI form along with a matching QML file for implementation purposes. You can add the form and file to an existing Qt Quick Project.",
    "trDisplayName": "QtQuick UI File Only",
    "trDisplayCategory": "Qt",
    "iconText": "ui.qml",
    "featuresRequired": [ "QtSupport.Wizards.FeatureQtQuick.UiFiles" ],
    "enabled": "%{JS: [ %{Plugins} ].indexOf('QmlJSEditor') >= 0}",

    "options" : [
        { "key": "UiFile", "value": "%{FormClass}.%{JS: Util.preferredSuffix('application/x-qt.ui+qml')}" }
    ],

    "pages" :
    [
        {
            "trDisplayName": "Define Class",
            "trShortTitle": "Details",
            "typeId": "Fields",
            "data" :
            [

                {
                    "name": "FormClass",
                    "trDisplayName": "Component form name:",
                    "mandatory": true,
                    "type": "LineEdit",
                    "data": {
                        "validator": "(?:[A-Z_][a-zA-Z_0-9]*|)",
                        "fixup": "%{JS: '%{INPUT}'.charAt(0).toUpperCase() + '%{INPUT}'.slice(1) }",
                        "trText": "Form"
                    }
                },
                {
                    "name": "TargetPath",
                    "type": "PathChooser",
                    "trDisplayName": "Path:",
                    "mandatory": true,
                    "data":
                    {
                        "kind": "existingDirectory",
                        "basePath": "%{InitialPath}",
                        "path": "%{InitialPath}"
                    }
                }
            ]
        },
        {
            "trDisplayName": "Project Management",
            "trShortTitle": "Summary",
            "typeId": "Summary"
        }
    ],
    "generators" :
    [
        {
            "typeId": "File",
            "data": [
                {
                    "source": "fileForm.ui.qml.tpl",
                    "target": "%{TargetPath}/%{UiFile}",
                    "openInEditor": true
                }
            ]
        }
    ]
}

答案 1 :(得分:0)

这似乎是Creator中缺少的功能。使用选项#1,因为它的工作量较少,并报告一个建议/错误,应该有一种方法来创建独立的.ui.qml文件。