我有一个 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_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
也不是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/