在qt应用程序里应用qrc里的style.qss文件,并且在程序编译的时候将style.less事后编译成style.qss,提供应用程序应用。

前提条件:装置node.js,而后全局装置less

办法1

在projects里增加build steps,执行命令行即可,有多少个less文件就增加多少次

办法2

在.pro文件里利用qmake进行预编译,编译机会为:build-link

假如你的我的项目里应用了qrc的style.qss文件,那么它会应用rcc.exe进行编译

1.应用QMAKE_PRE_LINK和QMAKE_POST_LINK
无奈实时生成,因为这两者的生命周期是在link前后,而rcc.exe是在build期,不合乎预期

2.应用system
system生命周期优于build期,然而当.pro文件变动后,system执行lessc命令,然而如果只是批改了.less文件,它不会主动执行,不合乎预期

3.应用PRE_TARGETDEPS,QMAKE_EXTRA_TARGETS
它两的生命周期优于build期,合乎预期,然而它是非阻塞式的,与build是并发执行的,rcc.exe拿到的还是旧的style.css,不合乎预期

4.应用QMAKE_EXTRA_COMPILERS
根本用法

test.output = 文件1.qsstest.commands = lessc 文件1.less 文件1.qss & lessc 文件2.less 文件2.qss ...testInput = 文件1.lesstest.input = testInputtest.CONFIG = no_link

留神:
1.test.input必须应用变量,且不容许加$ $,写成test.input = 文件1.less或者test.input=$$testInput都是无奈解析的

2.test.config必须写成no_link,否则是会报错的

封装之后为:

#扭转文件后缀名defineReplace(changeFileSubFix){    file = $$formatSlash($$1)    subfix = $$2    dir = $$dirname(file)    baseName = $$basename(file)    baseNameList =$$split(baseName,.)    fileName = $$first(baseNameList)    targetFile = $$join(fileName,,$$dir\,$$subfix)    return ($$targetFile)}#less命令,负责将配置的.less文件转换为.qss文件defineReplace(compileLessCommand){    files = $$formatSlash($$1)    firstFile = $$first(files)    input = $$firstFile    output = $$changeFileSubFix($$firstFile,".qss")    commands =    for(file,files){        targetFile = $$changeFileSubFix($$file,".qss")        commands += $$quote(lessc $$file $$targetFile &)    }    return ($$input $$commands $$output) #qmake不反对数据,数组嵌套语法}

应用

#定义款式文件lessFiles += $$PWD/assets/style.lesslessFiles += $$PWD/assets/style1.lesslessFiles += ...#编译款式文件styleLessResult = $$compileLessCommand($$lessFiles)styleLessInput = $$take_first(styleLessResult)styleLess.input = styleLessInputstyleLess.output = $$take_last(styleLessResult)styleLess.commands = $$styleLessResultstyleLess.CONFIG = no_linkQMAKE_EXTRA_COMPILERS += styleLess

生成的makefile文件:

compiler_styleLess_make_all: ..\..\..\ui\ui\assets\style.qsscompiler_styleLess_clean:    -$(DEL_FILE) ..\..\..\ui\ui\assets\style.qss..\..\..\ui\ui\assets\style.qss: ..\..\..\ui\ui\assets\style.less    lessc C:\UserData\xxx\xxx\xxx\ui\ui\assets\style.less C:\UserData\xxx\xxx\xxx\ui\ui\assets\style.qss & lessc C:\UserData\xxx\xxx\xxx\ui\ui\assets\style1.less C:\UserData\xxx\xxx\xxx\ui\ui\assets\style1.qss &