c++ - QList拷贝构造函数:how to new a QList<QStandardItem *> with variable

标签 c++ qt qt4

我有一个 QList<QString>读取和存储 QString将变量放入这样的列表中:

QList<QString> itemlist;

现在我想创建一个 QList<QStandardItem *>来自那个QString列表,我试过这个:

QList<QStandardItem *> *items = new QList<QStandardItem *>(itemlist);

编译器(vs2010)报错无法将“QList<T>”转换为“const QList<T> &

谁能告诉我怎么做?

最佳答案

这就是我在 C++11 中编写强力转换函数的方式。它需要一个 const-ref QList<QString>并返回 std::unique_ptrQList<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 也不是s copy-ctor public.

作为替代方案,您可以使用 std::unique_ptr<QList<std::shared_ptr<QStandardItem>>并获得 QStandardItems 的完全托管列表,但您必须从 std::shared_ptr 转移所有权将每个项目保存到您正在使用的 Qt 模型。

在 Linux/g++-4.9 上测试

关于c++ - QList拷贝构造函数:how to new a QList<QStandardItem *> with variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25470542/

相关文章:

c++ - 为什么每帧 4 像素上的 80 fps 对我来说滞后?

c++ - 在 VEINS 中成功接收的概率

c++ - 将 C++ 翻译成 Delphi,或转换成 dll

c++ - 在 Qt 中监控应用程序网络流量

c++ - Qt 中的 c++ 与 ANSI c++ 不同吗?

qt - 在Mac中安装QJson

C++:是否有理由为类型设置alignof > sizeof

c++ - 使用 QSqlTableModel 的 QTableView 的数据输入

c++ - QByteArray::append() 导致内存重新分配

c++ - 用于 Qt C++ 开发的模型 View 展示器