- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想以编程方式为具有特定文本的项目触发 QAbstractItemView::doubleClicked
插槽。我想使用 QAbstractItemView 类来完成此操作,而不是它的实现(如果可能的话)。
此任务归结为循环项目和比较字符串。但我找不到任何可以为我提供所有 QModelIndex 的方法。唯一提供不带参数的 QModelIndex
的方法是 QAbstractItemView::rootIndex
。但是当我查看 QModelIndex
文档时,我再次找不到访问它的子级和兄弟级的方法。
那么如何访问QAbstractItemView
中的所有QModelIndex
?
最佳答案
索引由模型提供,而不是由 View 提供。 View 提供了 rootIndex() 来指示它认为模型中的哪个节点为根;它可能是一个无效的索引。否则与数据无关。您必须遍历模型本身 - 您可以从 view->model()
获取它。
以下是模型的深度优先演练:
void iterate(const QModelIndex & index, const QAbstractItemModel * model,
const std::function<void(const QModelIndex&, int)> & fun,
int depth = 0)
{
if (index.isValid())
fun(index, depth);
if ((index.flags() & Qt::ItemNeverHasChildren) || !model->hasChildren(index)) return;
auto rows = model->rowCount(index);
auto cols = model->columnCount(index);
for (int i = 0; i < rows; ++i)
for (int j = 0; j < cols; ++j)
iterate(model->index(i, j, index), model, fun, depth+1);
}
为模型中的每个项目调用仿函数 fun
,从根开始并按深度-行-列顺序进行。
例如
void dumpData(QAbstractItemView * view) {
iterate(view->rootIndex(), view->model(), [](const QModelIndex & idx, int depth){
qDebug() << depth << ":" << idx.row() << "," << idx.column() << "=" << idx.data();
});
}
关于qt - 如何循环 QAbstractItemView 索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39153835/
我正在使用 Qt5 编写一个程序,该程序在 Linux 上运行良好,但在 Windows 上我观察到奇怪的行为: 当QTreeView::setModel被调用时,它向模型询问索引( QAbstrac
我想以编程方式为具有特定文本的项目触发 QAbstractItemView::doubleClicked 插槽。我想使用 QAbstractItemView 类来完成此操作,而不是它的实现(如果可能的
我正在使用 QAbstractItemView操纵队列。问题在于,当用户点击发送按钮时,编辑器不会关闭并更新模型中的值。这会导致一些挫败感。 我浏览了 Qt 文档,但似乎找不到关闭编辑器并提交更改的简
我已经实现了 QAbstractItemView 以在 line chart 中显示表格模型(有两列,一列用于 x 轴,另一列用于相应的 y 轴)风格。为此,我重新实现了 QAbstractItemV
我创建了由 QSortFilterProxyModel 继承的自定义代理模型。我上面提到的代理模型的源模型也是QAbstractTableModel继承的自定义模型。然后我将自定义代理模型设置为 QT
我有一个 QListView,它的模型(派生自 QAbstractItemModel)会根据 UI 中的某些标准定期更改。当当前模型更新或模型更改时,当 View 本身认为已添加/删除新行时,我想收到
QAbstractItemView 有 `setIndexWidget但没有“删除”功能。 我试图通过存储传递给 QAbstractItemView 的小部件来解决这个问题,并在我想从中删除它们时 h
我的 SuperTable 类继承自 QTableView,后者又继承自 QAbstractItemView。 在某些时候,QTableView 的QScrollBar 发出触发QAbstractIt
我有一个 QTreeView 填充了模型中的项目。在索引上调用 edit() 时,将显示自定义编辑器。该编辑器由两个 QLineEdit 小部件组成。 我希望焦点在按下 Tab 时在两个 QLineE
我在 QSplitter 中有 QListView 和 QTabWidget。 QListView 正在使用自定义模型和自定义委托(delegate)。在委托(delegate)中,我重新实现了 pa
我想在某些信号上启用和禁用 QTableView 小部件的编辑。我可以通过以下方式禁用它: table->setEditTriggers(QAbstractItemView::NoEditTrigge
考虑通过仅实现 QAbstractItemModel 的纯函数定义的普通 Model 类。 我必须用饼图显示模型(如 this example 中所示),我想到从 QAbstractItemView
我正在尝试在给定字符串值的情况下在 Qt 中选择抽象项目 View 的项目。我已经编写了根据字符串内容查找任何 QModelIndex 的函数。 我现在正尝试将我找到的所有那些 QModelIndex
我有一个显示方形项目的 QListView。我的问题是,当我滚动此列表时,它一次滚动一整行方块,我认为这看起来不对。相反,我希望列表一次滚动 1 个或两个像素 - 即平滑。这主要是外观上的变化。知道我
摘 self 正在阅读的书: By default, QListWidget is read-only. If we wanted the user to edit the items, we cou
我在 QT 中使用过模型/ View 。我已经构建了一个自定义 QAbstractItemView View 。正如我所知,虽然我从模型中设置的数据已更改,但 QAbstractItemView::d
我是一名优秀的程序员,十分优秀!