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语言,目前我不大懂这个语言,在这里记录只为了保留和希望能帮助到需要帮助的你。
//下面是脚本内容
@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工具执行)。