Russian Qt Forum
Май 23, 2024, 21:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTreeWidget, QMenu, Contex меню, неправильные координаты mapToGlobal  (Прочитано 4871 раз)
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())));
}
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Декабрь 28, 2015, 11:26 »

Достаточно сделать
Код
C++ (Qt)
menu.exec( QCursor::pos() );
и не париться  Подмигивающий

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

Qt 5.11/4.8.7 (X11/Win)
Bepec
Гость
« Ответ #2 : Декабрь 28, 2015, 11:53 »

Достойно, жаль что ссылок на эти решения я не нашёл. А так мож проиндексируются нормально Показает язык
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.102 секунд. Запросов: 22.