Qt自动添加资源文件

QML资源的添加,在做项目的时候我们添加一个文件,经常会忘记添加进资源编译,导致调试部署时候会出现找不到文件报错。特别是有分桌面版和机器版的工程,在桌面版明明调试好好的界面,部署进机器就是报错(我刚来公司的时候犯过这样的错)。之后我们就制作了一个脚本,自动帮我们添加资源。


脚本使用的语言是perl语言,目前我不大懂这个语言,在这里记录只为了保留和希望能帮助到需要帮助的你。


//下面是脚本内容


@all_Source_file = &find_all_file("DynavinQml", 1);
@all_Source_file2 = &find_all_file("DynavinQml\/MediaPlayer", 1);
@all_Source_file3 = &find_all_file("DynavinQml\/DiscPlayer", 1);
@all_Source_file4 = &find_all_file("DynavinQml\/PageMenu", 1);






open(OUT, ">os.qrc") || die "can't open os.qrc:$!";
print OUT '<RCC>'; print OUT "\n";
print OUT '    <qresource prefix="/">'; print OUT "\n";
for $dir (@all_Source_file){
if (
$dir =~ /.qml/ ||
$dir =~ /.bmp/ ||
$dir =~ /.gif/ ||
$dir =~ /.png/
) { 
if ($dir =~ /DynavinQml\/MediaPlayer\//){ next; }
if ($dir =~ /DynavinQml\/DiscPlayer\//) { next; }
if ($dir =~ /DynavinQml\/PageMenu\//) { next; }


print OUT "        <file>$dir</file>\n";
}
}
print OUT '    </qresource>'; print OUT "\n";
print OUT '</RCC>';
close(OUT) || die "can't close DynavinInclude.pri:$!";


open(OUT, ">MediaRes.qrc") || die "can't open MediaRes.qrc:$!";
print OUT '<RCC>'; print OUT "\n";
print OUT '    <qresource prefix="/">'; print OUT "\n";
for $dir (@all_Source_file2){
if (
$dir =~ /.qml/ ||
$dir =~ /.bmp/ ||
$dir =~ /.gif/ ||
$dir =~ /.png/
) { 
print OUT "        <file>$dir</file>\n";
}
}
print OUT '    </qresource>'; print OUT "\n";
print OUT '</RCC>';
close(OUT) || die "can't close DynavinInclude.pri:$!";



open(OUT, ">DiscRes.qrc") || die "can't open DiscRes.qrc:$!";
print OUT '<RCC>'; print OUT "\n";
print OUT '    <qresource prefix="/">'; print OUT "\n";
for $dir (@all_Source_file3){
if (
$dir =~ /.qml/ ||
$dir =~ /.bmp/ ||
$dir =~ /.gif/ ||
$dir =~ /.png/
) { 
print OUT "        <file>$dir</file>\n";
}
}
print OUT '    </qresource>'; print OUT "\n";
print OUT '</RCC>';
close(OUT) || die "can't close DynavinInclude.pri:$!";






open(OUT, ">MenuRes.qrc") || die "can't open MenuRes.qrc:$!";
print OUT '<RCC>'; print OUT "\n";
print OUT '    <qresource prefix="/">'; print OUT "\n";
for $dir (@all_Source_file4){
if (
$dir =~ /.qml/ ||
$dir =~ /.bmp/ ||
$dir =~ /.gif/ ||
$dir =~ /.png/
) { 
print OUT "        <file>$dir</file>\n";
}
}
print OUT '    </qresource>'; print OUT "\n";
print OUT '</RCC>';
close(OUT) || die "can't close DynavinInclude.pri:$!";







#parameter: @_ : folder position
sub find_all_dir() {
local($Source, $l_bInit) = @_;
if ($Source =~ /.git/) { return; }
opendir(DIR,"$Source" || die "can't open this $Source");
    local @files = readdir(DIR);
    closedir(DIR);
    for $file (@files){
        next if($file=~m/\.$/ || $file =~m/\.\.$/);
        if (-f "$Source/$file"){
            #print "$Source\/$file \n";
        }
        elsif(-d "$Source/$file"){
push(@dirs, "$Source\/$file");
            find_all_dir("$Source/$file", 0);
        }
    }
return @dirs;
}


#parameter: @_ : folder position
sub find_all_file() {
    local($dir, $l_bInit) = @_;
if ($l_bInit) { @files_out = (); }

if ($dir =~ /.git/) { 
#print "---------------------------------------------- $dir \n"; 
#return; 
}

opendir(DIR,"$dir" || die "can't open this $dir");
    local @files = readdir(DIR);
    closedir(DIR);
    for $file (@files){
        next if($file=~m/\.$/ || $file =~m/\.\.$/);
        if (-f "$dir/$file"){
            # print "$dir\/$file \n";
push(@files_out, "$dir\/$file");
        }
        elsif(-d "$dir/$file"){
           find_all_file("$dir/$file", 0);
        }
    }
return @files_out;
}


sub bDir_IsExist_File() {
local($Source, $string) = @_;
opendir(DIR,"$Source" || die "can't open this $Source");
    local @files = readdir(DIR);
    closedir(DIR);
    for $file (@files){
        next if($file=~m/\.$/ || $file =~m/\.\.$/);
        if (-f "$Source/$file"){
if(rindex($file, $string) == (length($file) - length($string)) ) {  #$string is $file`s end string
return 1; 
}
        }
    }


return 0;
}




//脚本内容结束


@all_Source_file = &find_all_file("DynavinQml", 1);
@all_Source_file2 = &find_all_file("DynavinQml\/MediaPlayer", 1);
@all_Source_file3 = &find_all_file("DynavinQml\/DiscPlayer", 1);
@all_Source_file4 = &find_all_file("DynavinQml\/PageMenu", 1);
上面分了四个资源文件,这个看个人需求。一个资源文件过大可能编译会出现堆内存不足(这个遇到过)
需要注意的是在工程中有对应的资源文件。


这个脚本文件命名qrc_make.pl(个人命名)

执行 perl qrc_make.pl (我是试用Git工具执行)。


猜你喜欢

转载自blog.csdn.net/DreamSonGO/article/details/78052277