创建单个 ui.qml 文件的标准(Qt)方法是啥?

Posted

技术标签:

【中文标题】创建单个 ui.qml 文件的标准(Qt)方法是啥?【英文标题】:What is a standard (Qt) way to create single ui.qml file?创建单个 ui.qml 文件的标准(Qt)方法是什么? 【发布时间】:2018-05-24 06:26:23 【问题描述】:

在 Qt 应用程序 example 中,他们使用单个 *.ui.qml 表单文件。我什么都懂,但我习惯于创建 2 个文件,例如 Contact.qmlContactForm.ui.qml,而不是一个 ContactForm.ui.qml。现在,如果我想创建这样一个表单文件,我有/看到两个选项:

    在创建标准 QML 文件 (Qt Quick 2) 时,我给出了名称和整个 .ui.qml 扩展名。

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

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

【问题讨论】:

【参考方案1】:

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

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

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

仅针对.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 并将其重命名为任何名称。 现在最重要的是,在新文件夹中,编辑向导 json 文件以自定义您的新向导..

(1) 赋予新的id以下链接中描述的角色

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

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

(4)在"name": "FormClass"部分,修改"trText": "%ClassForm""trText": "Form"

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

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

这里是 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
                
            ]
        
    ]

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于创建单个 ui.qml 文件的标准(Qt)方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

矩形作为 QML 中的根元素

Qt 类型的标准文本表示是啥?

Qt Quick ui 表单不支持函数

访问 zip 文件中文件的最快方法是啥?

Qml 应用程序编译 *Form.ui.qml 文件但忽略关联的 .qml 文件

在 ui.qml 文件中的组件上添加业务逻辑