Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ QTreeWidget headeritem

Автор: Rosster 1.12.2009, 23:01

Всем привет, как в QTreeWidget сделать так, чтобы при клике на headeritem вызывалась функция, имеется сигнал ItemClicked(). Но как через него сделать клик именно в заголовке? Или есть другие способы?
спасибо

Автор: Litkevich Yuriy 1.12.2009, 23:09

Цитата(Rosster @ 2.12.2009, 2:01) *
Но как через него сделать клик именно в заголовке?
ну "клик"-то ты мышкой делаешь.
Первое, что в голову пришло:
Сигнал передаёт в качестве параметра элемент дерева, его можно сравнить (по указателю) с тем, который возвращается функцией QTreeWidgetItem * headerItem () const, если они равны (и не нулевые), то щёлкнули по заголовку, тогда вызвать нужную функцию

Автор: Rosster 3.12.2009, 1:14

Не, не помогло))))
ItemClicked() работает только при нажатии на сами ветки дерева, а на заголовок не действует

Автор: Litkevich Yuriy 3.12.2009, 1:17

ну тогда только через QHeaderView:
QHeaderView * QTreeView::header () const
А в нём сигнал:
void QHeaderView::sectionClicked ( int logicalIndex ) [signal]

П.С. QTreeWidget наследник QTreeView

Автор: Rosster 3.12.2009, 12:17

Цитата(Litkevich Yuriy @ 3.12.2009, 1:17) *
ну тогда только через QHeaderView:
QHeaderView * QTreeView::header () const
А в нём сигнал:
void QHeaderView::sectionClicked ( int logicalIndex ) [signal]

П.С. QTreeWidget наследник QTreeView



Цитата(Litkevich Yuriy @ 3.12.2009, 1:17) *
ну тогда только через QHeaderView:
QHeaderView * QTreeView::header () const
А в нём сигнал:
void QHeaderView::sectionClicked ( int logicalIndex ) [signal]

П.С. QTreeWidget наследник QTreeView

Пишу:
QHeaderView *head = treeWidget->header();
connect(head, SIGNAL(sectionClicked(int )), this, SLOT(Function(int )));
QTableWidget c одной колонкой,а this - это диалог, остальные сигналы нормально работают, может не так делаю?

connect возвращает false

ошибся,connect возвращает true. Значит проблема в реализации кода, что-то не так

Автор: Litkevich Yuriy 3.12.2009, 15:28

Rosster, ты в слот воткни строчку:
qDebug() << "Into Function(int )";

П.С. Не забудь включить консоль при отладке

Автор: Rosster 3.12.2009, 22:25

Решение было найдено: может кому-то поможет:
connect((QObject*)head, SIGNAL(sectionClicked(int )), this, SLOT(Function(int )));
илии включить заголовок: QHeaderView в проект.

Автор: Litkevich Yuriy 4.12.2009, 0:37

Цитата(Rosster @ 4.12.2009, 1:25) *
(QObject*)
это бред како-то,
Цитата(Rosster @ 4.12.2009, 1:25) *
лии включить заголовок: QHeaderView в проект.
ну это само собой, это и в асистенте в описании класса написано

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)