[英]QList copy constructor:how to new a QList<QStandardItem *> with variable
我得到了一个QList<QString>
,它读取QString
变量并将其存储到这样的列表中:
QList<QString> itemlist;
现在,我想从该QString
列表中创建一个QList<QStandardItem *>
,我尝试这样做:
QList<QStandardItem *> *items = new QList<QStandardItem *>(itemlist);
编译器(vs2010)给出了无法从“ QList<T>
”转换为“ const QList<T> &
”的错误消息。
有人可以告诉我该怎么做吗?
这就是我在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被删除了), QStandardItem
的copy-ctor也没有公开。
或者,您可以使用std::unique_ptr<QList<std::shared_ptr<QStandardItem>>
并获取std::unique_ptr<QList<std::shared_ptr<QStandardItem>>
的完全托管列表,但是您必须将拥有每个项目的std::shared_ptr
所有权转让给您正在使用的Qt模型。
在Linux / g ++-4.9上测试
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.