You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QPersistentModelIndex与QModelIndex转换疑问:存储选中项需显式构造吗?

QModelIndex转QPersistentModelIndex:是否需要显式构造?

好问题!其实你完全可以不用显式调用QPersistentModelIndex(list[i])来构造对象,直接写_selectedIndices.append(list[i])就可以让编译器自动完成类型转换。

原因解析

Qt的QPersistentModelIndex类提供了一个接受const QModelIndex&参数的隐式构造函数,它的定义大致如下:

QPersistentModelIndex(const QModelIndex& index);

当你把QModelIndex类型的对象传递给QList<QPersistentModelIndex>::append()方法时,编译器会自动触发这个隐式构造逻辑,创建一个临时的QPersistentModelIndex对象并添加到列表中,最终效果和你显式构造的写法完全一致。

两种写法对比

  • 你的原始写法(显式构造):
for(int i=0;i<list.count();i++) {
    _selectedIndices.append(QPersistentModelIndex(list[i]));
}
  • 简化写法(隐式转换):
for(int i=0;i<list.count();i++) {
    _selectedIndices.append(list[i]);
}

甚至可以用C++11的范围for循环让代码更简洁:

for (const auto& idx : list) {
    _selectedIndices.append(idx);
}

两种写法都是合法且正确的:显式构造的好处是让代码意图更明确(一眼就能看出发生了类型转换),而隐式转换则让代码更简洁。具体选哪种可以根据你的代码风格偏好来决定。

内容的提问来源于stack exchange,提问作者numberCruncher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:23:15