Russian Qt Forum
Ноябрь 26, 2024, 16:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Почему connect(treeView->selectionModel()..., а не connect(treeView...  (Прочитано 5429 раз)
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()...,

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

Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Январь 23, 2009, 14:25 »

Потому что в QTreeView (и его родителях) нет сигнала selectionChanged. И это вам делжен был "сказать" (на консоль или output) connect. selectionChanged это слот.

Цитировать
void QAbstractItemView::selectionChanged ( const QItemSelection & selected, const QItemSelection & deselected )   [virtual protected slot]
« Последнее редактирование: Январь 23, 2009, 14:26 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Caduceus
Гость
« Ответ #2 : Январь 23, 2009, 14:26 »

У блин, точно, слот. А почему сигнал в модели, а не в виде?

Так вообще, если сигнал в модели, а и List и Tree привязаны к одной мо\дели, то можно просто повесить 2 слота от листа и от дерева на этот сигнал... Ага, вот для чего это сделано в модели?
« Последнее редактирование: Январь 23, 2009, 14:30 от Caduceus » Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Январь 23, 2009, 14:31 »

Потому что за это отвечает QItemSelectionModel.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Caduceus
Гость
« Ответ #4 : Январь 23, 2009, 14:34 »

А как тут втерлась эта модель? Моя модель - это QFileSystemModel - наследник QAbstractItemModel.

Откуда взялась эта модель?
Записан
Rcus
Гость
« Ответ #5 : Январь 23, 2009, 14:36 »

QItemSelectionModel * selectionModel () const
А нужна она затем чтобы можно было синхронизировать выделение в разных представлениях, привязанных к одной модели данных
Записан
Caduceus
Гость
« Ответ #6 : Январь 23, 2009, 14:37 »

Во блин, нехило все продумано

Спасибо
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Январь 23, 2009, 16:45 »

2 Caduceus, можешь почитать о концепции выделения на русском Обработка выбора элементов
Записан

Юра.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.161 секунд. Запросов: 23.