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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Model-View  (Прочитано 5604 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« : Март 19, 2014, 16:00 »

Подскажите, как сделать, чтобы при
нажатии указателя на вложенность в окне вьювера (QTreeView)
ничего не происходило.
« Последнее редактирование: Март 19, 2014, 16:31 от demaker » Записан
UltraPenguin
Гость
« Ответ #1 : Март 19, 2014, 19:10 »

Имеется ввиду чтобы не раскрывалась данная ветка?

UPD: если да, то почему нельзя хватать сигнал
Код:
expand ( const QModelIndex & index )
и просто закрывать эту ветку обратно?

Жесткое издевательство над пользователем Смеющийся
« Последнее редактирование: Март 19, 2014, 19:12 от UltraPenguin » Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #2 : Март 20, 2014, 10:05 »

А как ветку закрывать Непонимающий
Код:
collapse ( const QModelIndex)
Cпасибо
« Последнее редактирование: Март 20, 2014, 10:23 от demaker » Записан
UltraPenguin
Гость
« Ответ #3 : Март 20, 2014, 10:31 »

Кстати да, я очепятился. Сигнал такой
Код:
expanded ( const QModelIndex & index )

Цитировать
А как ветку закрывать  Непонимающий

Ну я бы сделал так:
- создал слот в наследнике от QTreeView (что-то типа slotCollapseIfNeeded(const QModelIndex & index ) )
- в нем написал бы логику того что мы будем закрывать обратно и когда, и для закрытия есть
Код:
collapse (  index ); //вызов слота
или
Код:
emit collapsed (  index ); //вызов сигнала и соответственно слота
- подключил свой слот к сигналу expanded

Я такого не реализовывал, поэтому не уверен есть ли вероятность, что сначала выполнится твой код, а лишь потом код слота expand (что в таком случае просто вновь развернет ветку)
Записан
VPS
Гость
« Ответ #4 : Март 20, 2014, 10:55 »

Я такого не реализовывал, поэтому не уверен есть ли вероятность, что сначала выполнится твой код, а лишь потом код слота expand (что в таком случае просто вновь развернет ветку)

Из документации:
void QTreeView::expanded ( const QModelIndex & index )   [signal]

This signal is emitted when the item specified by index is expanded.
Записан
UltraPenguin
Гость
« Ответ #5 : Март 20, 2014, 11:16 »

2vps

ок, понятно что он сигналит, когда ветка раскрылась. А если у нас два слота подключены к этому сигналу? Какой выполнится первым - тот, что по умолчанию или кастомный? В первом случае все норм, а во втором все попытки закрыть ветку сразу после открытия из кастомного слота обречены.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Март 20, 2014, 11:54 »

может проще просто временно скрывать эту стрелочку?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #7 : Март 20, 2014, 12:08 »

может проще просто временно скрывать эту стрелочку?

Как?
Записан
VPS
Гость
« Ответ #8 : Март 20, 2014, 12:26 »

ок, понятно что он сигналит, когда ветка раскрылась. А если у нас два слота подключены к этому сигналу? Какой выполнится первым - тот, что по умолчанию или кастомный? В первом случае все норм, а во втором все попытки закрыть ветку сразу после открытия из кастомного слота обречены.

В документации вроде написано, что при возникновении сигнала, слоты вызываются один за другим, порядок не определен.

П.С.: В исходниках класса "QTreeView" сигнал "expanded" вызывается в слоте "expand", т.е. если у Вас один пользовательский слот привязан к сигналу "expanded" (а в Вашем предложении вроде так), то он и отработает.
« Последнее редактирование: Март 20, 2014, 12:31 от vps » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Март 20, 2014, 13:43 »

Прильнем к первоисточнику
Код
C++ (Qt)
void QTreeView::mousePressEvent(QMouseEvent *event)
{
Q_D(QTreeView);
   bool handled = false;
   if (style()->styleHint(QStyle::SH_Q3ListViewExpand_SelectMouseType, 0, this) == QEvent::MouseButtonPress)
       handled = d->expandOrCollapseItemAtPos(event->pos());
if (!handled && d->itemDecorationAt(event->pos()) == -1)
       QAbstractItemView::mousePressEvent(event);
}
 
А скрыть можно как показывл kambala
Код
C++ (Qt)
tree->setRootIsDecorated(false);
« Последнее редактирование: Март 20, 2014, 13:50 от Igors » Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #10 : Март 20, 2014, 13:55 »

В документации вроде написано, что при возникновении сигнала, слоты вызываются один за другим, порядок не определен.
http://qt-project.org/doc/qt-5/qobject.html#connect-3
If a signal is connected to several slots, the slots are activated in the same order in which the connections were made, when the signal is emitted.
т.е., вызываются в том порядке в котором были сделаны подключения (посмотрел начиная с 4.7, там так же)
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #11 : Март 20, 2014, 14:09 »

А скрыть можно как показывл kambala
Код
C++ (Qt)
tree->setRootIsDecorated(false);
это для всех сразу, а я имел в виду для конкретного (с помощью убирания соответствующего флага у нужного айтема в модели)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
VPS
Гость
« Ответ #12 : Март 20, 2014, 15:39 »

http://qt-project.org/doc/qt-5/qobject.html#connect-3
If a signal is connected to several slots, the slots are activated in the same order in which the connections were made, when the signal is emitted.
т.е., вызываются в том порядке в котором были сделаны подключения (посмотрел начиная с 4.7, там так же)

Да, Вы правы.
Я вычитал то, что написал выше в wiki на сайте http://developer.nokia.com и, видимо, там устаревшая информация.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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