欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

qml加载图片资源的四种方式

程序员文章站 2022-05-15 19:08:37
...

QQ:609162385
先看qml代码:

   //QQuickImageProvider方式
    Button { id: idBtnGrab; width: 119; height: 119; checkable: true; x:300; y:300
        background: Item{ Image{width: parent.width;height: parent.height;fillMode: Image.PreserveAspectFit; source: (idBtnGrab.checked)? "image://iconProvider/resource/grab_click.png" :"image://iconProvider/resource/grab_default.png";}}
    }
    //相对资源路径方式,这种方式的前提是在main中添加了    engine.addImportPath( QString("qrc:/"));即可省去qrc:/
    //直接写成resource/clock_os.png
    Button { id: idBtnGrab2; width: 119; height: 119; checkable: true; x:300; y:450
        background: Item{ Image{width: parent.width;height: parent.height;fillMode: Image.PreserveAspectFit; source: (idBtnGrab2.checked)? "resource/clock_os.png" :"resource/clock_od.png";}}
    }
    //绝对资源路径方式
    Button { id: idBtnGrab3; width: 119; height: 119; checkable: true; x:450; y:300
        background: Item{ Image{width: parent.width;height: parent.height;fillMode: Image.PreserveAspectFit; source: (idBtnGrab3.checked)? "qrc:/resource/od_clock.png" :"qrc:/resource/os_clock.png";}}
    }
    //绝对路径方式,这种不可取
    Button { id: idBtnGrab4; width: 119; height: 119; checkable: true; x:450; y:450
        background: Item{ Image{width: parent.width;height: parent.height;fillMode: Image.PreserveAspectFit; source: (idBtnGrab4.checked)? "C:/Users/Administrator/Desktop/qmlResourceDemo/resource/eye_no.png" :"C:/Users/Administrator/Desktop/qmlResourceDemo/resource/eye_no.png";}}
    }

这里着重讲解第一种方式,这种方式非常适用于大型项目模块化编程管理,各个模块分开成立项目,最后合并项目的时候,只需要将资源文件拷贝到执行目录下(这里需要配合cmd来拷贝文件),而且不会像资源文件哪样造成exe文件非常庞大。
下面贴出cmd文件

set CP_DRV=%~d0
set CP_PATH=%~dp0
echo CP_PATH
rem ===========================================================================
rem %1 is source dir, %2 is the dest dir ( no debug ), %3 is debug or release
rem ===========================================================================

if not exist "%1" goto NO_SOURCE
if not exist "%2" mkdir "%1"
set SRC_DIR=%1
set DST_DIR=%2

if "%3" equ "debug"  goto DEBUG_VERSION
goto REL_VERSION

rem ===================================================================
rem copy the library of debug version
rem ===================================================================
:DEBUG_VERSION
if not exist %DST_DIR%\debug   mkdir %DST_DIR%\debug
if not exist %DST_DIR%\debug\resource  mkdir  %DST_DIR%\debug\resource
if not exist %DST_DIR%\data_store  mkdir %DST_DIR%\data_store

if not exist %DST_DIR%\debug\resource\dropdown.png          copy  %SRC_DIR%\resource\dropdown.png        %DST_DIR%\debug\resource\ /y
if not exist %DST_DIR%\debug\resource\play.png          	copy  %SRC_DIR%\resource\play.png        	 %DST_DIR%\debug\resource\ /y
if not exist %DST_DIR%\debug\resource\stop.png          	copy  %SRC_DIR%\resource\stop.png        	 %DST_DIR%\debug\resource\ /y
if not exist %DST_DIR%\debug\resource\grab_default.png      copy  %SRC_DIR%\resource\grab_default.png    %DST_DIR%\debug\resource\ /y
if not exist %DST_DIR%\debug\resource\grab_click.png        copy  %SRC_DIR%\resource\grab_click.png      %DST_DIR%\debug\resource\ /y
if not exist %DST_DIR%\debug\resource\caliper.png           copy  %SRC_DIR%\resource\caliper.png         %DST_DIR%\debug\resource\ /y
if not exist %DST_DIR%\debug\resource\mark.png              copy  %SRC_DIR%\resource\mark.png            %DST_DIR%\debug\resource\ /y
if not exist %DST_DIR%\debug\resource\area.png              copy  %SRC_DIR%\resource\area.png            %DST_DIR%\debug\resource\ /y
if not exist %DST_DIR%\debug\resource\comment.png           copy  %SRC_DIR%\resource\comment.png         %DST_DIR%\debug\resource\ /y
if not exist %DST_DIR%\debug\resource\eye_no.png            copy  %SRC_DIR%\resource\eye_no.png          %DST_DIR%\debug\resource\ /y
if not exist %DST_DIR%\debug\resource\eye_yes.png           copy  %SRC_DIR%\resource\eye_yes.png         %DST_DIR%\debug\resource\ /y
if not exist %DST_DIR%\debug\resource\os_clock.png          copy  %SRC_DIR%\resource\os_clock.png        %DST_DIR%\debug\resource\ /y
if not exist %DST_DIR%\debug\resource\od_clock.png          copy  %SRC_DIR%\resource\od_clock.png        %DST_DIR%\debug\resource\ /y
if not exist %DST_DIR%\debug\resource\clock_od.png          copy  %SRC_DIR%\resource\clock_od.png        %DST_DIR%\debug\resource\ /y
if not exist %DST_DIR%\debug\resource\clock_os.png          copy  %SRC_DIR%\resource\clock_os.png        %DST_DIR%\debug\resource\ /y
if not exist %DST_DIR%\debug\resource\eyeball.png           copy  %SRC_DIR%\resource\eyeball.png         %DST_DIR%\debug\resource\ /y
if not exist %DST_DIR%\debug\resource\down.png              copy  %SRC_DIR%\resource\down.png            %DST_DIR%\debug\resource\ /y

goto EXIT

rem ==================================================================
rem  copy the library of release version
rem ==================================================================
:REL_VERSION
if not exist %DST_DIR%\release  mkdir %DST_DIR%\release
if not exist %DST_DIR%\release\resource  mkdir %DST_DIR%\release\resource
if not exist %DST_DIR%\data_store mkdir %DST_DIR%\data_store


if not exist %DST_DIR%\release\resource\dropdown.png          copy  %SRC_DIR%\resource\dropdown.png        %DST_DIR%\release\resource\ /y
if not exist %DST_DIR%\release\resource\play.png          	  copy  %SRC_DIR%\resource\play.png        	   %DST_DIR%\release\resource\ /y
if not exist %DST_DIR%\release\resource\stop.png          	  copy  %SRC_DIR%\resource\stop.png        	   %DST_DIR%\release\resource\ /y
if not exist %DST_DIR%\release\resource\grab_default.png      copy  %SRC_DIR%\resource\grab_default.png    %DST_DIR%\release\resource\ /y
if not exist %DST_DIR%\release\resource\grab_click.png        copy  %SRC_DIR%\resource\grab_click.png      %DST_DIR%\release\resource\ /y
if not exist %DST_DIR%\release\resource\caliper.png           copy  %SRC_DIR%\resource\caliper.png         %DST_DIR%\release\resource\ /y
if not exist %DST_DIR%\release\resource\mark.png              copy  %SRC_DIR%\resource\mark.png            %DST_DIR%\release\resource\ /y
if not exist %DST_DIR%\release\resource\area.png              copy  %SRC_DIR%\resource\area.png            %DST_DIR%\release\resource\ /y
if not exist %DST_DIR%\release\resource\eye_no.png            copy  %SRC_DIR%\resource\eye_no.png          %DST_DIR%\release\resource\ /y
if not exist %DST_DIR%\release\resource\eye_yes.png           copy  %SRC_DIR%\resource\eye_yes.png         %DST_DIR%\release\resource\ /y
if not exist %DST_DIR%\release\resource\comment.png           copy  %SRC_DIR%\resource\comment.png         %DST_DIR%\release\resource\ /y
if not exist %DST_DIR%\release\resource\os_clock.png          copy  %SRC_DIR%\resource\os_clock.png        %DST_DIR%\release\resource\ /y
if not exist %DST_DIR%\release\resource\od_clock.png          copy  %SRC_DIR%\resource\od_clock.png        %DST_DIR%\release\resource\ /y
if not exist %DST_DIR%\release\resource\clock_od.png          copy  %SRC_DIR%\resource\clock_od.png        %DST_DIR%\release\resource\ /y
if not exist %DST_DIR%\release\resource\clock_os.png          copy  %SRC_DIR%\resource\clock_os.png        %DST_DIR%\release\resource\ /y
if not exist %DST_DIR%\release\resource\eyeball.png           copy  %SRC_DIR%\resource\eyeball.png         %DST_DIR%\release\resource\ /y
if not exist %DST_DIR%\release\resource\down.png              copy  %SRC_DIR%\resource\down.png            %DST_DIR%\release\resource\ /y

goto EXIT


rem ==================================================================
rem   exit 
rem ==================================================================
:EXIT

同时我们可以在pro文件中去调用cmd文件来拷贝文件,
这样点击构建就会执行cmd命令去拷贝资源文件到执行目录

win32 {
   CONFIG( debug, debug|release) {
       QMAKE_POST_LINK +=  $$win32Path("$$PWD/copyfiles.cmd")  $$win32Path("$$PWD")  $$win32Path("$$OUT_PWD") debug
   } else {
       QMAKE_POST_LINK +=  $$win32Path("$$PWD/copyfiles.cmd")  $$win32Path("$$PWD")  $$win32Path("$$OUT_PWD") release
   }
}