Название: QTreeWidget: не вызывается слот по сигналу itemDoubleClicked Отправлено: cresta от Март 08, 2009, 07:09 .h:
Цитировать void tvDblClicked(QTreeWidgetItem *item, int col); .cpp: Цитировать void MainWin::createTreeWidget(){ QTreeWidgetItem *tv = new QTreeWidgetItem(...); ... QObject::connect(tv, SIGNAL(itemDoubleClicked (QTreeWidgetItem *, int)), this, SLOT(tvDblClicked(QTreeWidgetItem *, int))); ... } void MainWin::tvDblClicked(QTreeWidgetItem *item, int col){ qDebug("aaaaaaaaaaaaaaaaaaaa"); if ( item->childCount () ){ if ( item->isExpanded() ) item->setExpanded(false); else item->setExpanded(true); } else{ } } Слот не вызывается. Компиляция без ошибок, при двойном клике на итемах TreeWidget никаких сообщений от QObject (не найден слот и т.п.) нет. Всё как бы правильно, только не работает. Ставил бряк на вход слота - слот не вызывается. В чем может быть проблема? Другой сигнал - itemSelectionChanged() нормально вызывается. P.S. Сейчас заметил, что не срабатывает для root-итемов, которые имеют дочерние итемы. Для самих child'ов слот вызывается. Название: Re: QTreeWidget: не вызывается слот по сигналу itemDoubleClicked Отправлено: BRE от Март 08, 2009, 09:22 Цитировать void MainWin::createTreeWidget(){ QTreeWidgetItem *tv = new QTreeWidgetItem(...); Сейчас заметил, что не срабатывает для root-итемов, которые имеют дочерние итемы. Стандартное поведение: при двойном клике происходит разворачивание/сворачивание ветки.Для самих child'ов слот вызывается. Если сделаешь tv->setExpandsOnDoubleClick ( false ), будешь получать сигнал. Название: Re: QTreeWidget: не вызывается слот по сигналу itemDoubleClicked Отправлено: cresta от Март 08, 2009, 13:30 Ну да, QTreeWidget :) Ну в общем вы поняли.
Что-то setExpandsOnDoubleClick не очень помогает. Я извиняюсь, наверное не полную информацию дал: Root-итемы имеют свойство setFirstColumnSpanned(true) и width root-итемов сделано достаточно маленьким. Это сделано, чтобы избавиться от длинных пунктирных линий, появляющихся при раскрытии root-итема. Т.о. куда бы ни тыкали мышью, попадаем не в сам итем (column 0), а в этот вот spanned итем. Если прицелиться и попасть именно в маленький промежуток, соответствующий именно column 0, то сигнал проходит. По всей остальной ширине (там где spanned) сигнал не проходит. Вот код создания полностью: Код: void MainWin::createTreeWidget(){ P.S. Если убрать свойство spanned, то сигнал проходит при клику на любом месте итема. Но при этом текст в колонке 0 практически не виден (только одна буква) Название: Re: QTreeWidget: не вызывается слот по сигналу itemDoubleClicked Отправлено: cresta от Март 08, 2009, 13:57 Это рисунок со свойством spanned. Если попасть именно в букву А в слове Аккумуляторы, то сигнал проходит.
По всей остальной ширине сигнал не проходит (http://anzorei.ru/img/spanned.jpg) А это с отключенным spanned. Здесь сигнал проходит при клике на любом месте, по всей ширине. Но первой колонки не видно. Если делать широкую первую колонку, то вылазят пунктирные линии, а это мне не нравится. (http://anzorei.ru/img/non-spanned.jpg) |