QWidget::pos() vs X11, функция вовзращает бред. |
Здравствуйте, гость ( Вход | Регистрация )
QWidget::pos() vs X11, функция вовзращает бред. |
lucifer_vrn |
13.5.2009, 20:33
Сообщение
#1
|
Студент Группа: Участник Сообщений: 19 Регистрация: 27.2.2009 Пользователь №: 580 Спасибо сказали: 3 раз(а) Репутация: 0 |
сразу, все о чем идет речь сугобо проявляется под линуксом. По виндой все прекрасно.
что происходит: когда я вызываю функцию QWidget::pos() с некоторой переодичностью, ко мне возвращается QPoint(0,0), хотя координата окна у меня явно не 0,0. Чуть реже но бывает, возвращает не правильную позицию окна +-5 пикселей по вертикали. я в шоке. промучался, вычитал в асисте в статье: http://doc.crossplatform.ru/qt/en/4.5.0/geometry.html Цитата Don't be surprised if you find one where QWidget::frameGeometry() returns wrong results though. теперь я уже не просто в шоке, а в полном шоке. помучался, нашел небольшой выход - QWidget::mapToGlobal(QPoint(0,0)) такой вызов уже (0,0) не возвращает, но +-5 пикселей от реальных координат возвращает. ппц. я в полном шоке. можно ли как нибудь достоврено получить координаты окна под Х11 ???? мой код примерно такой:
тыкая туда - сюда окно(close()/show()) я вижу как в дебаге возвращается координата, которая по не понятным причинам в случайны момент начинает плыть то на 5 пикселей вврех, то на 5 пикселей вниз....
Причина редактирования: используй тэг code
|
|
|
Kagami |
13.5.2009, 21:05
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Если сделаешь небольшой компилируемый проект, то я с удовольствием проверю его у себя на Debian 5.0
|
|
|
BRE |
13.5.2009, 21:17
Сообщение
#3
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
На prog.org обсуждался этот вопрос, правда к решению так и не пришли.
http://www.prog.org.ru/topic_8639_0.html |
|
|
lucifer_vrn |
14.5.2009, 18:56
Сообщение
#4
|
Студент Группа: Участник Сообщений: 19 Регистрация: 27.2.2009 Пользователь №: 580 Спасибо сказали: 3 раз(а) Репутация: 0 |
ну я то хоть какой-то решение нашел ( QWidget::mapToGlobal )
этот QWidget::mapToGlobal хоть не возвращает полный бред типа (0,0), а врет на пять пикселей. есть еще какие нибудь варианты как можно получить позицию окна????? кроме х() и у(), которые работают также как и pos() |
|
|
molchanoviv |
15.5.2009, 7:59
Сообщение
#5
|
Старейший участник Группа: Сомодератор Сообщений: 597 Регистрация: 18.7.2008 Из: Саратов Пользователь №: 238 Спасибо сказали: 41 раз(а) Репутация: 5 |
Если не ошибаюсь то в книге Бланшет было описано решение.(а если ошибаюсь, то у Макса Шлее)
|
|
|
lucifer_vrn |
15.5.2009, 16:53
Сообщение
#6
|
Студент Группа: Участник Сообщений: 19 Регистрация: 27.2.2009 Пользователь №: 580 Спасибо сказали: 3 раз(а) Репутация: 0 |
molchanoviv, а в каком месте примерно не помнишь??? я в обеих книгах не нашел.
|
|
|
molchanoviv |
15.5.2009, 17:04
Сообщение
#7
|
Старейший участник Группа: Сомодератор Сообщений: 597 Регистрация: 18.7.2008 Из: Саратов Пользователь №: 238 Спасибо сказали: 41 раз(а) Репутация: 5 |
Не помню.
|
|
|
lucifer_vrn |
15.5.2009, 19:14
Сообщение
#8
|
Студент Группа: Участник Сообщений: 19 Регистрация: 27.2.2009 Пользователь №: 580 Спасибо сказали: 3 раз(а) Репутация: 0 |
потанцевав с одним, двумя и более бубнами придумал следующее:
, где заранее в конструкторе определен
как ни странно эта извращенская конструкция вовзращает правильные координаты.... конечно бред, но работает, меня в ней лишь смушает +1..... mapToGlobal(QPoint(0,0)).x() как оказалось вовращает координаты без заголовка и ширины полоски за которую растягиает окно. с заголовком я разобрался - titleHeight это оно и есть. заголовок в самом приложении у меня то есть то нету, поэтому я его как переменную вынес. а вот бордюрчик для растягивания, ширина которого как я понял и есть QStyle::PM_SplitterWidth) возвращает ширину меньшую на 1. может я не правильно запрашиваю эту ширину??? |
|
|
ViGOur |
15.5.2009, 21:56
Сообщение
#9
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
|
|
|
Litkevich Yuriy |
15.5.2009, 22:33
Сообщение
#10
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
возвращает ширину меньшую на 1 может в этом причина:Цитата Note that for historical reasons the values returned by the bottom() and right() functions deviate from the true bottom-right corner of the rectangle: The right() function returns left() + width() - 1 and the bottom() function returns top() + height() - 1. The same is the case for the point returned by the bottomRight() convenience function. In addition, the x and y coordinate of the topRight() and bottomLeft() functions, respectively, contain the same deviation from the true right and bottom edges. из описания QRectк слову сказать в QRectF такого замечания нет. |
|
|
Текстовая версия | Сейчас: 3.5.2024, 4:32 |