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

来源:互联网 发布:北京恒润科技知乎 编辑:程序博客网 时间:2024/06/07 18:30

假设向一个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();       //.....其他内容    }




1 0
原创粉丝点击