如何在Qt Creator中使用qmllint?

9

qmllint是由KDAB编写的QML文件语法检查器,作为Qt 5.4的插件提供。它的使用基于命令行,例如:

$ qmllint myFile.qml

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


1
你能通过QtCreator的图形界面来管理它吗?另外,你想在什么阶段、什么进程中以何种方式运行它,或者我的解释可以吗?由于你的问题在这方面有点模糊,我试图提及可能的情况。 - László Papp
3个回答

8

QtCreator

在QtCreator中,您可以设置自定义命令,而无需手动修改qmake文件,因为这样会影响项目中的其他人。

因此,如果您只想为自己设置自定义命令,并且不会为其他人带来麻烦,建议使用QtCreator的GUI按照以下步骤操作:

  • Projects(左侧窗格)
  • Build & Run
  • Build Steps
  • Add Build Step

下面是如何设置相应参数的屏幕截图:

enter image description here

使用QtCreator的GUI,您可以轻松更改顺序,而无需触及项目文件。这样做的用例包括:

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

  • 您只有C++文件,因此不存在“链接”这样的概念。

  • 等等。

qmake

除了QtCreator外,还有其他通用方法可用于设置自定义命令,例如将命令放入变量中:

  • QMAKE_PRE_LINK

    QMAKE_PRE_LINK = qmllint $$PWD/path/to/myFile.qml
    
  • QMAKE_POST_LINK

    QMAKE_POST_LINK = qmllint $$PWD/path/to/myFile.qml
    
  • System command execution from your qmake project file

    system("qmllint $$PWD/path/to/myFile.ml")
    
  • Adding custom targets with QMAKE_EXTRA_TARGETS

    qmllinttarget.commands = qmllint $$PWD/path/to/myFile.qml
    QMAKE_EXTRA_TARGETS += qmllinttarget
    

3

我相信这个问题的关键点 不是 为了一个已知名称的单个文件进行检查,而是在项目的所有qml文件上运行qmllint。理想情况下,这应该在构建任何内容之前完成,因为带有错误的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文件运行qmllint,但仅当任何qml文件自上次构建以来发生更改时才执行此操作。
已在Windows上测试,使用Qt 5.11和MSVC。

1
您可以在.pro 文件中使用 QMAKE_POST_LINK 变量,例如:
QMAKE_POST_LINK = qmllint $$PWD/QMLFiles/myFile.qml

当您构建项目时,此功能会在您的QML文件上运行qmllint。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接