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

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




  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值