1) ну это же какой то бред, то что они делают. Ничего не работает.
2) зачем у методов параметр QPoint? если мне нужно транслировать координаты виджета в координаты экрана, разумеется что я буду именно у него этот метод и дергать и использовать именно его координаты. Зачем еще параметр?
3) как ими вообще пользоваться?
4) простое: есть диалог, на нем кнопка. мне надо чтото нарисовать на или рядом с кнопкой. У кнопки есть
QPoint p = mybutton->pos();
пытаюсь чтото вывести по этим координатам, а оно вообще в другом углу рисуется. Понятно, что видимо весь секрет в тех методах, но к сожалению всё перепробовал, они не работают, и нифига не документировано.
5) зачем все эти переводы из чего то во чтото? думаю было бы намного проще:
QPoint p = mybutton->ХочуКоординатыНеважноОтносительноЧего(); // просто хочу координаты чтобы там чтото нарисовать
Только Путин, и никого кроме Путина! О Великий и Могучий Путин — царь на веки веков, навсегда!
Смотрю только Соловьева и Михеева, для меня это самые авторитетные эксперты.
КРЫМ НАШ! СКОРО И ВСЯ УКРАИНА БУДЕТ НАШЕЙ!
Здравствуйте, AlexGin, Вы писали:
AG>Здравствуйте, уважаемый Мёртвый Даун, Вы писали: AG>... AG>Насчёт применения mapToGlobal — я использую его для отображения контекстного меню:
Да в том то и дело, с контекстными меню никаких проблем и нет...
Только Путин, и никого кроме Путина! О Великий и Могучий Путин — царь на веки веков, навсегда!
Смотрю только Соловьева и Михеева, для меня это самые авторитетные эксперты.
КРЫМ НАШ! СКОРО И ВСЯ УКРАИНА БУДЕТ НАШЕЙ!
Здравствуйте, Мёртвый Даун, Вы писали:
МД>Всем привет!
МД>Ктото может что либо внятного объяснить по поводу семейства методов:
МД>QWidget::mapToGlobal(QPoint) МД>QWidget::mapToParent(QPoint) МД>QWidget::mapTo(QPoint)
МД>QWidget::mapFromGlobal(QPoint) МД>QWidget::mapFromParent(QPoint) МД>QWidget::mapFrom(QPoint)
Посмотри картинку по этой ссылке: http://doc.qt.io/qt-4.8/application-windows.html#window-geometry
На этой картинке:
зеленые методы (x(), y(), frameGeometry(), pos(), move()) — в системе координат родительского виджета,
фиолетовыфе (geometry(), width(), height(), rect(), size())- в системе координат текущего виджета (у которого запрошены).
Так проще всего двигать дочерние виджеты относительно родителя.
МД>1) ну это же какой то бред, то что они делают. Ничего не работает. МД>2) зачем у методов параметр QPoint? если мне нужно транслировать координаты виджета в координаты экрана, разумеется что я буду именно у него этот метод и дергать и использовать именно его координаты. Зачем еще параметр? МД>3) как ими вообще пользоваться? МД>4) простое: есть диалог, на нем кнопка. мне надо чтото нарисовать на или рядом с кнопкой. У кнопки есть МД>QPoint p = mybutton->pos();
попробуй:
QPoint p = this->mapFrom( mybutton->parentWidget(), mybutton->pos() );
(если тебе надо рисовать в координатах this.)
Если не получилось — приведи полный код своего примера.
МД>пытаюсь чтото вывести по этим координатам, а оно вообще в другом углу рисуется. Понятно, что видимо весь секрет в тех методах, но к сожалению всё перепробовал, они не работают, и нифига не документировано. МД>5) зачем все эти переводы из чего то во чтото? думаю было бы намного проще: МД>QPoint p = mybutton->ХочуКоординатыНеважноОтносительноЧего(); // просто хочу координаты чтобы там чтото нарисовать
Здравствуйте, Chorkov, Вы писали:
C>Посмотри картинку по этой ссылке: C>http://doc.qt.io/qt-4.8/application-windows.html#window-geometry C>На этой картинке: C> зеленые методы (x(), y(), frameGeometry(), pos(), move()) — в системе координат родительского виджета, C> фиолетовыфе (geometry(), width(), height(), rect(), size())- в системе координат текущего виджета (у которого запрошены). C>Так проще всего двигать дочерние виджеты относительно родителя.
Это вообще какое то зло! У меня есть только экран, и следовательно его координаты. Всё остальное — не нужно.
Нет, всё равно там ничего не работает, впрочем как и всё всегда в Qt.
Пример:
Диалоговое окно, с кнопкой. Кнопка где-то произвольно на диалоге лежит. Мне надо показать message box рядом с кнопкой.
Что за огород надо городить с какими то переводами координат? Ну естессно нужны экранные! Экранные!!! Долбанное Qt!!! Всегда нужны экранные! Одни, единственные!
Почему: mybutton->pos() возвращает всегда QPoint(0, 0) ??? Кто это всё проектировал в Qt? Надеюсь он уже прокрутил пальцы через мясорубку?
mybutton->mapToGlobal(mybutton->pos()); // вообще бред возвращает... но другие методы этого семейства вообще ничего не возвращают.
Как это сделать? Ну почему всегда возникают проблемы на пустом месте в этом сраном Qt????????????????????
Ок, подскажи плиз, как мне узнать координаты хоть чего то в окне, чтобы чтото показать по этим координатам? Оно ничего не работает.
Короче хрень полная.
Опустимся до самого элементарного вопроса:
Кнопка на диалоге. Диалог по середине экрана. Так, что кнопка тоже ровно по середине экрана. Я хочу следующее:
(Псевдокод)
QPoint p = mybutton->pos(); // ВОТ ЗДЕСЬ p ДОЛЖЕН ЖЕЛЕЗОБЕТОННО БЫТЬ QPoint(screen.width/2, screen.height/2)
Какие действия для этого надо проделать? Что может быть проще????? Жесть!!!!!!!!!!!!!!!!
Только Путин, и никого кроме Путина! О Великий и Могучий Путин — царь на веки веков, навсегда!
Смотрю только Соловьева и Михеева, для меня это самые авторитетные эксперты.
КРЫМ НАШ! СКОРО И ВСЯ УКРАИНА БУДЕТ НАШЕЙ!
Здравствуйте, Мёртвый Даун, Вы писали:
МД>Опустимся до самого элементарного вопроса: МД>Кнопка на диалоге. Диалог по середине экрана. Так, что кнопка тоже ровно по середине экрана. Я хочу следующее: МД>(Псевдокод) МД>QPoint p = mybutton->pos(); // ВОТ ЗДЕСЬ p ДОЛЖЕН ЖЕЛЕЗОБЕТОННО БЫТЬ QPoint(screen.width/2, screen.height/2)
МД>Какие действия для этого надо проделать? Что может быть проще????? Жесть!!!!!!!!!!!!!!!!
Пример сделай, а так ответ mybutton->mapToGlobal( mybutton->pos() );
Телепатия подсказывает что ты пытаешься все эксперименты делать в конструкторе и у тебя всегда QPoint(0,0), делай так:
Здравствуйте, Igore, Вы писали:
I>Телепатия подсказывает что ты пытаешься все эксперименты делать в конструкторе и у тебя всегда QPoint(0,0), делай так: I>
А что там [this] означает? (Ну понятно что это новый синтаксис signal/slot в Qt 5)
Только Путин, и никого кроме Путина! О Великий и Могучий Путин — царь на веки веков, навсегда!
Смотрю только Соловьева и Михеева, для меня это самые авторитетные эксперты.
КРЫМ НАШ! СКОРО И ВСЯ УКРАИНА БУДЕТ НАШЕЙ!
Здравствуйте, Мёртвый Даун, Вы писали:
I>>Телепатия подсказывает что ты пытаешься все эксперименты делать в конструкторе и у тебя всегда QPoint(0,0), делай так: I>>
МД>А что там [this] означает? (Ну понятно что это новый синтаксис signal/slot в Qt 5)
Почитай про C++11 lambda, они добавили возможность передать в singleShot фуктор. В лямбде пишу [ this ]чтобы можно было обращаться к this, если его не захватить то нельзя будет вызвать this->ui_->mybutton, это будет просто свободная функция. Можно переписать так
Лямбда это считай неименованый функтор, хотя если использовать Qt4 то я бы просто писал QTimer::singleShot( 0, this, SLOT( onStarted ) ); Главное чтобы прошел цикл доставки сообщений и данные на форме уже были размещены, тогда у элементов будет и позиция и правильная высота, ширина.
Здравствуйте, Мёртвый Даун, Вы писали:
МД>Опустимся до самого элементарного вопроса: МД>Кнопка на диалоге. Диалог по середине экрана. Так, что кнопка тоже ровно по середине экрана. Я хочу следующее: МД>(Псевдокод) МД>QPoint p = mybutton->pos(); // ВОТ ЗДЕСЬ p ДОЛЖЕН ЖЕЛЕЗОБЕТОННО БЫТЬ QPoint(screen.width/2, screen.height/2)
МД>Какие действия для этого надо проделать? Что может быть проще????? Жесть!!!!!!!!!!!!!!!!
Мёртвый Даун, может, просто дело в том, что вы мыслите всегда глобальными координатами. А часто удобно работать локальными. Если у вас диалог посреди экрана, то вместо того, чтобы позиционировать кнопку на нем тоже "посреди экрана", можно просто позиционировать кнопнку посреди диалога (тогда она автоматически окажется и посреди экрана). Иными словами, вместо
МД>(Псевдокод) МД>QPoint p = mybutton->pos(); // ВОТ ЗДЕСЬ p ДОЛЖЕН ЖЕЛЕЗОБЕТОННО БЫТЬ QPoint(screen.width/2, screen.height/2)
надо мыслить
(Псевдокод)
QPoint p = mybutton->pos(); // ВОТ ЗДЕСЬ p ДОЛЖЕН ЖЕЛЕЗОБЕТОННО БЫТЬ в локальных координатах QPoint(dialog.width/2, dialog.height/2)
На всякий случай нюансы:
— функция pos() дает координаты виджета в локальных координатах (то есть, относительно верхнего левого угла родительского виджета)
— к функциям геометрии виджета типа rect(), geometry() корректно обращаться только после того, как он будет первый раз отрисован (станет первый раз виден), потому в конструкторе ими лучше не пользоваться (а например, в обработчике virtual void showEvent(QShowEvent * event) )
п.с. для позиционирования виджетов внутри родительского окна придуманы лэйуаты, которые сэкономят вам кучу времени и нервов. не поленитесь, почитайте (это одна из тех вещей, что в свое время меня восхитила больше всех в qt, и за нее можно многое простить )
Здравствуйте, уважаемый _hum_, Вы писали:
__>п.с. для позиционирования виджетов внутри родительского окна придуманы лэйуаты, которые сэкономят вам кучу времени и нервов. не поленитесь, почитайте (это одна из тех вещей, что в свое время меня восхитила больше всех в qt, и за нее можно многое простить )
+100500
Да, именно идеология лайоутов мне очень понравилась в Qt.
Скажем так — после MFC и WinAPI (где всё время в OnSize делаем кучу всяких MoveWindow)
— это было то, что меня приятно удивило