Russian Qt Forum

Qt => Кладовая готовых решений => Тема начата: Bepec от Декабрь 28, 2015, 04:28



Название: QTreeWidget, QMenu, Contex меню, неправильные координаты mapToGlobal
Отправлено: Bepec от Декабрь 28, 2015, 04:28
Собственно заметил интересный баг.
В QTreeWidget mapToGlobal возвращает неверные координаты. Проблема в том, что данная функция не учитывает высоту HeaderView.
Гугление не дало ответа кроме "да бывало", проверка в версии 5.5 так же выявила эту проблему (т.е. актуальность версиям Qt 4.7-5.5).

Решение - самостоятельно добавлять высоту headerView в зависимости от их видимости.

Код:
void regEdit::on_treeWidget_customContextMenuRequested(const QPoint & pos)
{
QPoint gPos = ui.treeWidget->mapToGlobal( pos);
menu.exec(QPoint(gPos.x(), ui.treeWidget->isHeaderHidden()?gPos.y():(gPos.y() + ui.treeWidget->header()->height())));
}


Название: Re: QTreeWidget, QMenu, Contex меню, неправильные координаты mapToGlobal
Отправлено: GreatSnake от Декабрь 28, 2015, 11:26
Достаточно сделать
Код
C++ (Qt)
menu.exec( QCursor::pos() );
и не париться  ;)

А сия проблема/фича происходит из-за того, что QTreeWidget, вернее QAbstractScrollArea фильтрует события от viewport(),
поэтому и маппить позицию нужно от него:
Код
C++ (Qt)
QPoint gPos = ui.treeWidget->viewport()->mapToGlobal( pos);


Название: Re: QTreeWidget, QMenu, Contex меню, неправильные координаты mapToGlobal
Отправлено: Bepec от Декабрь 28, 2015, 11:53
Достойно, жаль что ссылок на эти решения я не нашёл. А так мож проиндексируются нормально :P