Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Flakes от Ноябрь 24, 2008, 01:39



Название: contextMenu для QHeaderView
Отправлено: Flakes от Ноябрь 24, 2008, 01:39
Немного не тривиальная проблема. Нужно реализовать контекстное меню на QHeaderView, поэтому вроде нужно переопределять contextMenuEvent. Ну чтож, сделал свой класс, унаследовав от QHeaderView. Пробую живучесть, установил для QTableView свой header, ну и конечно оказалось ему не откуда черпать данные, и заголовок пуст, то есть ваще не отображается.

Покопался, в описалове сказано, что оно делает QAbstractItemModel::headerData() для модели, но как его с моделью законнектить? Ниче типа SetModel() я не нашел.

А может совсем глубоко зарываюсь, и все просто?


Название: Re: contextMenu для QHeaderView
Отправлено: Barmaglodd от Ноябрь 24, 2008, 07:57
Когда у QTableView делаешь setModel, у QHeaderView вызывается setModel с этой же моделью.


Название: Re: contextMenu для QHeaderView
Отправлено: vvvmag от Ноябрь 24, 2008, 09:27
можно не переопределять класс QHeaderView. Сделай проще создай слот в котором будет создаваться меню например
Qmenu* mymenu = new QMenu();
mymenu->addAction("myAction");
mymenu->exec();

останется сделать
connect(QHeaderView, SIGNAL(customContextMenuRequest(QPoint)), this, SLOT("имя слота"))

у меня работает


Название: Re: contextMenu для QHeaderView
Отправлено: spirit от Ноябрь 24, 2008, 09:35
можно не переопределять класс QHeaderView. Сделай проще создай слот в котором будет создаваться меню например
Qmenu* mymenu = new QMenu();
mymenu->addAction("myAction");
mymenu->exec();

останется сделать
connect(QHeaderView, SIGNAL(customContextMenuRequest(QPoint)), this, SLOT("имя слота"))

у меня работает


+ еще надо задать setContextMenuPolicy(Qt::Qt::CustomContextMenu) для виджета у которого будет доступно контекстное меню
и еще сигнал правильно написать: customContextMenuRequest , а customContextMenuRequested.  :)


Название: Re: contextMenu для QHeaderView
Отправлено: Flakes от Ноябрь 30, 2008, 19:57
Спасибо, менюшка работает. А как узнать, на каком индексе QHeaderView я вызвал меню, высчитывать по пикселям координаты? А дальше?


Название: Re: contextMenu для QHeaderView
Отправлено: spirit от Ноябрь 30, 2008, 20:07
Цитировать
int QHeaderView::logicalIndexAt ( const QPoint & pos ) const
This is an overloaded member function, provided for convenience.
Returns the logical index of the section at the position given in pos. If the header is horizontal the x-coordinate will be used to find the logical index; otherwise the y-coordinate will be used.
See also sectionPosition().


Название: Re: contextMenu для QHeaderView
Отправлено: Flakes от Ноябрь 30, 2008, 20:54
ага, я как раз стал присматриваться к logicalIndexAt. Спасибо еще раз!