创建单个 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.qml
和 ContactForm.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 部分工作正常,例如:
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)方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章