首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QList复制构造函数:如何使用变量新建QList<QStandardItem *>

QList复制构造函数:如何使用变量新建QList<QStandardItem *>
EN

Stack Overflow用户
提问于 2014-08-24 10:05:28
回答 1查看 1.5K关注 0票数 1

我得到了一个QList<QString>,它读取QString变量并将其存储到这样的列表中:

代码语言:javascript
复制
QList<QString> itemlist;

现在,我想从这个QList<QStandardItem *>列表中创建一个QString,我尝试了以下方法:

代码语言:javascript
复制
QList<QStandardItem *> *items = new QList<QStandardItem *>(itemlist);

编译器(vs2010)提供了不能将"QList<T>“转换为"const QList<T> &”的错误消息。

有人能告诉我怎么做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-24 12:20:52

这就是我如何在C++11中编写蛮力转换函数的方式。它接受一个const-ref到QList<QString>,并将一个std::unique_ptr返回到一个QList<QStandardItem*>

代码语言:javascript
复制
#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;
}

示例:

代码语言:javascript
复制
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;
}

输出:

代码语言:javascript
复制
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上进行测试

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25470542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档