Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: dr_Begemot от Январь 13, 2011, 14:53



Название: QTreeView: Одновременный выбор нескольких элементов по shift
Отправлено: dr_Begemot от Январь 13, 2011, 14:53
Не получается выбрать несколько элементов в QTreeView.
Повешен обработчик на сигнал модели (QAbstractItemModel):
Код:
bool ok;
ok = connect(externTree->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &,const QItemSelection &)),
this, SLOT(markNode(const QItemSelection &,const QItemSelection &)));

Вот реализация функции markNode:
Код:
void MyClassDlg::markNode(const QItemSelection & selected, const QItemSelection & deselected){
QModelIndexList selList = selected.indexes();
QModelIndexList deselList = deselected.indexes();
for(int i=0; i<deselList.count(); i++){
MyPropertyNode *node = treeModel->nodeFromIndex( deselList[i] );
if(node)
node->setIsSelected(false);
}
for(int i=0; i<selList.count(); i++){
MyPropertyNode *node = treeModel->nodeFromIndex( selList[i] );
if(node)
node->setIsSelected(true);
}
}

Пытаюсь, зажимая Shift мышкой выбирать в таблице несколько элементов, но
Код:
selList.count()
все равно равен 1.
Что я делаю не так?

Спасибо)


Название: Re: QTreeView: Одновременный выбор нескольких элементов по shift
Отправлено: Fat-Zer от Январь 13, 2011, 15:18
void   QAbstractItemView::setSelectionMode ( QAbstractItemView::SelectionMode mode )


Название: Re: QTreeView: Одновременный выбор нескольких элементов по shift
Отправлено: dr_Begemot от Январь 13, 2011, 15:43
void   QAbstractItemView::setSelectionMode ( QAbstractItemView::SelectionMode mode )

А что туда передать?


Название: Re: QTreeView: Одновременный выбор нескольких элементов по shift
Отправлено: Fat-Zer от Январь 13, 2011, 15:56
посмотрите в асистенте... там 3 разных режима для выбора нескольких айтемов:
  • QAbstractItemView::ContiguousSelection
  • QAbstractItemView::ExtendedSelection
  • QAbstractItemView::MultiSelection
отличаются тем, что используют разные клавиши для мультивыбора... кто что именно делает - посмотрите в асистенте.