我得到了一个QList<QString>,它读取QString变量并将其存储到这样的列表中:
QList<QString> itemlist;现在,我想从这个QList<QStandardItem *>列表中创建一个QString,我尝试了以下方法:
QList<QStandardItem *> *items = new QList<QStandardItem *>(itemlist);编译器(vs2010)提供了不能将"QList<T>“转换为"const QList<T> &”的错误消息。
有人能告诉我怎么做吗?
发布于 2014-08-24 12:20:52
这就是我如何在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> (因为它的复制-ctor被删除),QStandardItem的复制-ctor也不是公共的。
作为另一种选择,您可以使用std::unique_ptr<QList<std::shared_ptr<QStandardItem>>并获得一个完全托管的QStandardItems列表,但是您必须将所有权从持有每一项的std::shared_ptr转移到您正在使用的Qt模型。
在Linux/g++-4.9上进行测试
https://stackoverflow.com/questions/25470542
复制相似问题