我很难弄清楚如何从不是来自Qt的函数访问Qt资源文件。
我已经阅读了How to access Qt resource data from non-Qt functions发布的问题,但给出的答案只是解决了如何将文件包含在与可执行文件相同的目录中,这不是我想要做的。我希望确保文件存在,并且在我的程序运行时无法被篡改(这就是我想使用qrc路由的原因)。
为您提供一些背景知识:我在使用OpenCV's Machine Learning Libraries的程序中使用此功能,我需要加载培训文件。加载处理采用one argument,即.xml文件的路径。
目前唯一可以解决的解决方案是每次加载文件时我都会使用QFile打开qrc文件,然后暂时将该文件输出到我的可执行文件的目录中,然后使用我的OpenCV加载函数加载此文件,然后从我的目录中删除临时文件。
这是一个非常混乱的解决方法,我想避免。我的问题的任何解决方案将不胜感激。
答案 0 :(得分:3)
感谢@peppe提供使用cv :: FileStorage和CvStatModel :: read的提示
以下是我使用的解决方案:
QFile qFile(":/QtResourceFileName.xml");
if (qFile.open(QFile::ReadOnly))
{
QTextStream qTextStream(&qFile);
std::string str = qTextStream.readAll().toStdString();
cv::FileStorage fileStorage(str, cv::FileStorage::MEMORY);
cv::Ptr<cv::ml::SVM> svm =
Algorithm::read<cv::ml::SVM>(fileStorage.getFirstTopLevelNode());
}