QT中添加的资源文件qrc时的路径问题小结
2015-10-01 21:43
357 查看
假设向一个QT的应用程序里添加了资源文件(icon.qrc),然后有在里面添加了下面的内容:
看起来向下面的样子:
如果引用上述资源文件里的【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里要正确显示,或者为系统设置编码格式:
或者在需要使用的地方,使用明确的编码格式,如下面的QString result字符串:
其他如“utf8”格式,总之要和文本文件的编码格式一致。
⑤ 可以将":/"传递到QDir中,枚举其下的文件内容,如下:
<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(); //.....其他内容 }
相关文章推荐
- Ubuntu下Qt-4.7.1的静态编译
- 在QT程序中使用cout和cin
- 稀疏矩阵ADT_SeqTriple
- QT 内置标准对话框
- 编译Qt arm库并在开发板运行
- qt-solutions提供了8个开源项目
- Qt4 inputpanel 升级改造
- 可以供MFC调用的,QT实现的DLL(使用qt-solutions的qtwinmigrate实现)
- ZetCode PyQt4 tutorial layout management
- QT 让窗口(或控件)居中
- QTableWidget 用法总结(只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象)
- QT下int与QByteArray的转换
- 无法关闭的QT程序(覆盖closeEvent,新建QProcess并脱离关系)
- QT:不规则窗口的实现
- Qt源码分析之信号和槽机制
- QT程序制作deb包并安装在应用程序菜单
- Qt全局热键(windows篇)(使用RegisterHotKey和句柄进行注册)
- Qt中 QString 和int, char等的“相互”转换,关键是QString.toLocal8Bit().data();
- QT中异形窗口的绘制(winEvent处理WM_NCHITTEST消息)
- Qt学习之路【4】:qmake:syntax expecting ")")