如何使用QModelIndex访问QStandardItemModel及其数据?
How to access QStandardItemModel and it's data using a QModelIndex?
我有一个click()信号,它知道QModelIndex类型的选定索引。
void onListClicked(const QModelIndex & index) { /* ... */ }
不,我想访问所单击项的数据。我发现我可以使用model()
访问模型:
void onListClicked(const QModelIndex & index)
{
QStandardItemModel * model {index.model()};
}
但是这失败了,因为model() getter只允许我返回一个QAbstractItemModel。
error: invalid conversion from 'const QAbstractItemModel*' to 'QStandardItemModel*' [-fpermissive]
如何访问QStandardItemModel或者更好的选择QStandardItem?我的唯一标识符存储在QStandardItem::data()中。
我需要的是这样的东西:
void onListClicked(const QModelIndex & index)
{
QStandardItemModel * model {index.model()};
QStandardItem * item {model->itemFromIndex(index)};
qDebug() << item->data().toString();
}
但这不起作用。为什么这么难呢?我在这里错过了什么?
我认为你可以直接从模型索引中获取数据:
void onListClicked(const QModelIndex & index) {
index.data(Qt::UserRole + 1);
// ...
}
您可以使用任何其他角色来检索不同类型的数据
直接转换:
QStandardItemModel *model { static_cast<QStandardItemModel *>(model()); }
我遇到了同样的问题,因为我需要检索我的特殊模型:
auto myModel=const_cast<MySpecialModel*>(dynamic_cast<const MySpecialModel*>(modelIndex.model()));
这对我来说是一个完美的解决方案。
但是,这样做似乎有一个重要的问题:
- http://doc.qt.io/qt-5/qmodelindex.html
上面写着:
返回一个指向模型的const指针,因为调用模型的非const函数可能会使模型索引无效,并可能导致应用程序崩溃。
不幸的是,文档没有说明为什么可能会崩溃,以及不应该做什么。
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 在运行时处理类型擦除的数据-如何不重新发明轮子