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
相关产品推荐
相关产品推荐

