我得到一个QList<QString>
,可以将QString
个变量读入并存储到这样的列表中:
QList<QString> itemlist;
现在我想从QList<QStandardItem *>
列表中创建一个QString
,我试过了:
QList<QStandardItem *> *items = new QList<QStandardItem *>(itemlist);
编译器(vs2010)提供的错误消息无法从“QList<T>
”转换为“const QList<T> &
”
有人可以告诉我该怎么做吗?
答案 0 :(得分:1)
这就是我在 C ++ 11 中编写强力转换函数的方法。它需要一个const-ref
QList<QString>
并将std::unique_ptr
返回QList<QStandardItem*>
:
#include <QtCore/QList>
#include <QtGui/QStandardItem>
using ItemList = QList<QStandardItem*>;
std::unique_ptr<ItemList> toItemList(const QList<QString>& strings)
{
std::unique_ptr<ItemList> items(new ItemList);
for(auto& str : strings)
{
items->push_back(new QStandardItem(str));
}
return items;
}
示例:强>
QList<QString> strings;
strings.push_back("Hello");
strings.push_back("QStandardItem");
auto items = toItemList(strings);
for (auto item : *items.get())
{
std::cout << item->text().toStdString() << std::endl;
}
<强>输出:强>
Hello
QStandardItem
请注意:虽然列表本身由std::unique_ptr
管理,但值不会以任何方式管理,即您必须自己管理所有QStandardItem
的已分配内存。但是,知道Qt,我怀疑你会在一些管理释放的模型中使用这些项目。
在其他情况下,我使用了
std::unique_ptr<QList<std::unique_ptr<QStandardItem>>
或只是QList<QStandardItem>
但QList
(在我可用的版本中)都不是移动感知的,并且不能使用值类型std::unique_ptr<T>
(因为它的copy-ctor被删除),也不是{{1复制公开。
作为替代方案,您可以使用QStandardItem
并获取完整托管的QStandardItem列表,但您必须将所有权从std::unique_ptr<QList<std::shared_ptr<QStandardItem>>
保留每个项目转移到您正在使用的Qt模型
在Linux / g ++上测试 - 4.9