Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Caduceus от Январь 23, 2009, 14:11



Название: Почему connect(treeView->selectionModel()..., а не connect(treeView...
Отправлено: Caduceus от Январь 23, 2009, 14:11
Сижу разбираюсь с моделями-видами, сигналами-слотами
У меня есть дерево QTreeView и список QListView . При клике на элемент дереыва должен меняться список.

Полез я в хидер QTreeView  - нашел selectionChanged - судя по названию - то что надо. Переопределил QListView и добавил свой слот ChangeContent, ну и счатливый, написал

connect(treeView, SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)),
      listView, SLOT(ChangeContent(const QItemSelection &, const QItemSelection&)));

Не заходил он в ChangeContent

Покопавшиьс 10 минут на просторах сети нашел, что надо писать connect(treeView->selectionModel()...,

Вот собственно и вопрос - а почему так? И как понимать какой сигнал надо ловить? И почему ничего не ловилоось в первом сулчае?



Название: Re: Почему connect(treeView->selectionModel()..., а не connect(treeView...
Отправлено: pastor от Январь 23, 2009, 14:25
Потому что в QTreeView (и его родителях) нет сигнала selectionChanged. И это вам делжен был "сказать" (на консоль или output) connect. selectionChanged это слот.

Цитировать
void QAbstractItemView::selectionChanged ( const QItemSelection & selected, const QItemSelection & deselected )   [virtual protected slot]


Название: Re: Почему connect(treeView->selectionModel()..., а не connect(treeView...
Отправлено: Caduceus от Январь 23, 2009, 14:26
У блин, точно, слот. А почему сигнал в модели, а не в виде?

Так вообще, если сигнал в модели, а и List и Tree привязаны к одной мо\дели, то можно просто повесить 2 слота от листа и от дерева на этот сигнал... Ага, вот для чего это сделано в модели?


Название: Re: Почему connect(treeView->selectionModel()..., а не connect(treeView...
Отправлено: pastor от Январь 23, 2009, 14:31
Потому что за это отвечает QItemSelectionModel.


Название: Re: Почему connect(treeView->selectionModel()..., а не connect(treeView...
Отправлено: Caduceus от Январь 23, 2009, 14:34
А как тут втерлась эта модель? Моя модель - это QFileSystemModel - наследник QAbstractItemModel.

Откуда взялась эта модель?


Название: Re: Почему connect(treeView->selectionModel()..., а не connect(treeView...
Отправлено: Rcus от Январь 23, 2009, 14:36
QItemSelectionModel * selectionModel () const
А нужна она затем чтобы можно было синхронизировать выделение в разных представлениях, привязанных к одной модели данных


Название: Re: Почему connect(treeView->selectionModel()..., а не connect(treeView...
Отправлено: Caduceus от Январь 23, 2009, 14:37
Во блин, нехило все продумано

Спасибо


Название: Re: Почему connect(treeView->selectionModel()..., а не connect(treeView...
Отправлено: lit-uriy от Январь 23, 2009, 16:45
2 Caduceus, можешь почитать о концепции выделения на русском Обработка выбора элементов (http://doc.crossplatform.ru/qt/4.4.3/model-view-view.html#handling-selections-of-items)