如何在Qt Creator中使用qmlint?

如何在Qt Creator中使用qmlint?,qt,qml,qt-creator,qt5,qmllint,Qt,Qml,Qt Creator,Qt5,Qmllint,是KDAB编写的QML文件的语法检查器,作为Qt5.4的插件提供。它的用法基于命令行,如: $ qmllint myFile.qml 是否可以在Qt Creator中直接使用它?您可以在.pro文件中使用QMAKE\u POST\u LINK变量,如: QMAKE_POST_LINK = qmllint $$PWD/QMLFiles/myFile.qml 当您构建项目时,将在QML文件上运行QMLLIT。QtCreator 实际上,您可以在QtCreator中设置运行自定义命令,而不会手动使

是KDAB编写的QML文件的语法检查器,作为Qt5.4的插件提供。它的用法基于命令行,如:

$ qmllint myFile.qml

是否可以在Qt Creator中直接使用它?

您可以在.pro文件中使用
QMAKE\u POST\u LINK
变量,如:

QMAKE_POST_LINK = qmllint $$PWD/QMLFiles/myFile.qml
当您构建项目时,将在QML文件上运行QMLLIT。

QtCreator 实际上,您可以在QtCreator中设置运行自定义命令,而不会手动使qmake文件混乱,因为这也会影响项目中的所有其他人

因此,如果您想使用QtCreator闪亮的GUI确保您只为自己而做,而不是为他人而做,我建议您遵循以下步骤:

  • 项目(左窗格)
  • 构建和运行
  • 构建步骤
  • 添加构建步骤
以下是如何使用相应参数设置命令的屏幕:

使用QtCreator的GUI,您可以轻松地使用相同的概念更改顺序,而无需触摸项目文件(如果您愿意)。有这样的用例:

  • 在正确验证qml文件之前,您不希望运行任何步骤,甚至不希望运行qmake

  • <> >你只有C++文件,所以没有“链接”这样的东西。

  • 等等

克马克 在QtCreator之外还有其他有用的“通用”方法,尽管您询问了此IDE,例如将命令放入变量中,如:

  • 从qmake项目文件执行系统命令

    system("qmllint $$PWD/path/to/myFile.ml")
    

我认为这个问题的重点不是检查一个已知名称的文件,而是在一个项目的所有qml文件上运行qmlint。理想情况下,这应该在构建任何内容之前完成,因为包含错误qml文件的构建可能没有实际价值

扩展lpapp的答案并稍微玩转qmake,我得到了以下解决方案:

ALL_PWD_QML_FILES = $$files($${_PRO_FILE_PWD_}/*.qml , true)

# a command that creates an empty file with a given name.
win32 {
    MY_TOUCH_CMD = copy NUL
} else {
    MY_TOUCH_CMD = touch
}

qmllint.output = .qmllint/${QMAKE_FILE_BASE}.qmllint
qmllint.input = ALL_PWD_QML_FILES
qmllint.commands = qmllint ${QMAKE_FILE_NAME} && $${MY_TOUCH_CMD} ${QMAKE_FILE_OUT}
qmllint.CONFIG += no_link recursive target_predeps

QMAKE_EXTRA_COMPILERS += qmllint
这假定所有qml文件要么与.pro文件位于同一目录中,要么位于子目录中

在实际生成之前,它将在所有qml文件上运行QMLLIT,但前提是自上一次生成以来任何qml文件都已更改


在装有Qt 5.11和MSVC的Windows上测试。

您能通过QtCreator gui管理它吗?另外,您希望在什么时候以及如何运行它,在哪个阶段,什么过程,等等,或者我的解释是可以的?我试图提到可能的情况,因为你的问题在这个意义上有点模糊。
system("qmllint $$PWD/path/to/myFile.ml")
qmllinttarget.commands = qmllint $$PWD/path/to/myFile.qml
QMAKE_EXTRA_TARGETS += qmllinttarget
ALL_PWD_QML_FILES = $$files($${_PRO_FILE_PWD_}/*.qml , true)

# a command that creates an empty file with a given name.
win32 {
    MY_TOUCH_CMD = copy NUL
} else {
    MY_TOUCH_CMD = touch
}

qmllint.output = .qmllint/${QMAKE_FILE_BASE}.qmllint
qmllint.input = ALL_PWD_QML_FILES
qmllint.commands = qmllint ${QMAKE_FILE_NAME} && $${MY_TOUCH_CMD} ${QMAKE_FILE_OUT}
qmllint.CONFIG += no_link recursive target_predeps

QMAKE_EXTRA_COMPILERS += qmllint