您的位置:首页 > 编程语言 > Qt开发

QT中添加的资源文件qrc时的路径问题小结

2015-10-01 21:43 357 查看
假设向一个QT的应用程序里添加了资源文件(icon.qrc),然后有在里面添加了下面的内容:

<RCC>
<qresource prefix="/image">
<file>image/DIW.ico</file>
</qresource>
<qresource prefix="/text">
<file>text/1.cpp</file>
</qresource>
</RCC>


看起来向下面的样子:



如果引用上述资源文件里的【1.cpp】,文件的路径应该是“:/text/text/1.cpp”,而不是“:/text/1.cpp”。

为什么?不必追问太多,直接到编译后形成的文件“qrc_icon.cpp”里找答案吧:



看到“qrc_icon.cpp”文件里的内容,有这么几点认识:

① 所添加的各种资源文件,最终被编译成unsigned char,放到字节数组qt_resource_data[]里了;

② 既然这些内容是在编译时已经创建,因此只能做“读”操作,如QFile::open(QIODevice::ReadOnly),而不能做写操作;

③ 每次改动外部被添加资源文件的内容,需要重新编译;

④ 当要使用外部资源文件为文本内容时,注意该文件的编码格式,可以使用常用的文本编辑器notepad++查看当前格式,在QT里要正确显示,或者为系统设置编码格式:

QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));

或者在需要使用的地方,使用明确的编码格式,如下面的QString result字符串:

void MainWindow::readResult(int exitCode)
{
if(exitCode == 0) {
#if defined(Q_OS_WIN32)
QTextCodec* gbkCodec = QTextCodec::codecForName("GBK");
QString result = gbkCodec->toUnicode(p->readAll());
#elif defined(Q_OS_LINUX)
QTextCodec* utfCodec = QTextCodec::codecForName("UTF-8");
QString result = utfCodec->toUnicode(p->readAll());
#endif
QMessageBox::information(this, "dir", result);
}
}


其他如“utf8”格式,总之要和文本文件的编码格式一致。

⑤ 可以将":/"传递到QDir中,枚举其下的文件内容,如下:

QDir d(":/");
qDebug()<<"absolutePath: "<<d.absolutePath();
qDebug()<<"dirName: "<<d.dirName();
foreach (QFileInfo info, d.entryInfoList())
{
qDebug()<<"absoluteDir: "<<info.absoluteDir();
qDebug()<<"absoluteFilePath: "<<info.absoluteFilePath();
qDebug()<<"absolutePath: "<<info.absolutePath();
//.....其他内容
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: