将 QT 资源转换为 ::std::istream&
Posted
技术标签:
【中文标题】将 QT 资源转换为 ::std::istream&【英文标题】:Convert QT Resource to ::std::istream& 【发布时间】:2019-02-25 18:12:26 【问题描述】:我正在尝试将 QResource XML 转换为 istream。 XML 进入的第三方签名如下所示。
::std::unique_ptr< ::NO::Peoplefile >
peoplefile (::std::istream& is,
::xml_schema::Flags f = 0,
const ::xml_schema::Properties& p = ::xml_schema::Properties ());
但是如何将 QResource 转换为 istream?
尝试使用以下内容,但无法将其转换为::std::istream&
。有什么想法吗?
ifstream& QFileToifstream(QFile & file)
Q_ASSERT(file.isReadable());
return ifstream(::_fdopen(file.handle(), "r")); //error: non-const lvalue reference to type 'basic_ifstream<...>' cannot bind to a temporary of type 'basic_ifstream<...>'
【问题讨论】:
【参考方案1】:由于有问题的资源是 XML,我假设它不是很大,并且可以很容易地全部读入内存。在这种情况下,您可以简单地使用std::istringstream
...
/*
* Attempt to open the bound resource `:/some-resource.xml'.
*/
if (QFile f(":/some-resource.xml"); f.open(QIODevice::ReadOnly))
/*
* Read its contents into an std::string which is used to
* initialize an std::istringstream.
*/
std::istringstream is(f.readAll().toStdString());
/*
* Pass the istringstream as the first parameter to peoplefile.
*/
auto result = peoplefile(is, 0/* flags */, ::xml_schema::Properties());
【讨论】:
以上是关于将 QT 资源转换为 ::std::istream&的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 std::istream_iterator 上使用的 std::find_if 似乎返回最后一个元素?
istream_iterator && istream_iteratorbuf