以编程方式 select QAbstractItemView 中的 QModelIndexes
Programmatically select QModelIndexes in QAbstractItemView
我正在尝试 select Qt 中抽象项目视图的项目给定它们的字符串值。我已经编写了根据字符串内容找到任何 QModelIndex
的函数。
我现在正试图将我找到的所有这些 QModelIndex
es 放入单个 selection 中。我的方法签名:
// Will select all items that contain any of the strings
// given by 1st argument
virtual void selectItems(const QStringList&) override;
我的实现看起来像这样(但不能正常工作):
void QAbstractItemViewResult::selectItems(const QStringList& list)
{
if(list.size() > 0) {
QItemSelectionModel::SelectionFlags flags = QItemSelectionModel::ClearAndSelect;
QItemSelection selection;
Q_FOREACH(const QString text, list) {
// Find index by string is a method I implemented earlier
// The method works correctly
QModelIndex index(findIndexByString(targetView_, list[0]));
if(index.isValid()) {
// This is an attempt to add model indx into selection
selection.select(index, index);
}
}
// When the selection is created, this should select it in index
targetView_->selectionModel()->select(selection, flags);
}
}
问题是,此代码始终只有 select 列表中的第一项,例如。 "B1","C1","A1"
看起来像这样:
table 启用了多select离子:
那么如何以编程方式正确 select 多个项目?如果您需要 findIndexByString
,可以在这里找到:https://github.com/Darker/qt-gui-test/blob/master/results/QAbstractItemViewResult.cpp#L5
您在每次迭代时清除选择。
替换:
QItemSelectionModel::SelectionFlags flags = QItemSelectionModel::ClearAndSelect;
作者:
QItemSelectionModel::SelectionFlags flags = QItemSelectionModel::Select;
编辑: 你传递 list[0]
而不是 text
:
findIndexByString(targetView_, list[0])
顺便说一下,您应该在循环中使用 const 引用:
Q_FOREACH(const QString &text, list) {
如果您使用 C++11 或更高版本,则为本机版本:
for (const QSring &text : list) {
我正在尝试 select Qt 中抽象项目视图的项目给定它们的字符串值。我已经编写了根据字符串内容找到任何 QModelIndex
的函数。
我现在正试图将我找到的所有这些 QModelIndex
es 放入单个 selection 中。我的方法签名:
// Will select all items that contain any of the strings
// given by 1st argument
virtual void selectItems(const QStringList&) override;
我的实现看起来像这样(但不能正常工作):
void QAbstractItemViewResult::selectItems(const QStringList& list)
{
if(list.size() > 0) {
QItemSelectionModel::SelectionFlags flags = QItemSelectionModel::ClearAndSelect;
QItemSelection selection;
Q_FOREACH(const QString text, list) {
// Find index by string is a method I implemented earlier
// The method works correctly
QModelIndex index(findIndexByString(targetView_, list[0]));
if(index.isValid()) {
// This is an attempt to add model indx into selection
selection.select(index, index);
}
}
// When the selection is created, this should select it in index
targetView_->selectionModel()->select(selection, flags);
}
}
问题是,此代码始终只有 select 列表中的第一项,例如。 "B1","C1","A1"
看起来像这样:
table 启用了多select离子:
那么如何以编程方式正确 select 多个项目?如果您需要 findIndexByString
,可以在这里找到:https://github.com/Darker/qt-gui-test/blob/master/results/QAbstractItemViewResult.cpp#L5
您在每次迭代时清除选择。
替换:
QItemSelectionModel::SelectionFlags flags = QItemSelectionModel::ClearAndSelect;
作者:
QItemSelectionModel::SelectionFlags flags = QItemSelectionModel::Select;
编辑: 你传递 list[0]
而不是 text
:
findIndexByString(targetView_, list[0])
顺便说一下,您应该在循环中使用 const 引用:
Q_FOREACH(const QString &text, list) {
如果您使用 C++11 或更高版本,则为本机版本:
for (const QSring &text : list) {