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. Спасибо еще раз!