Перемещение окна за любую его часть |
Здравствуйте, гость ( Вход | Регистрация )
Перемещение окна за любую его часть |
breeve |
17.5.2010, 9:35
Сообщение
#1
|
Участник Группа: Участник Сообщений: 188 Регистрация: 26.12.2009 Пользователь №: 1336 Спасибо сказали: 9 раз(а) Репутация: 1 |
Сабж. Есть popup окно и нужно сделать чтобы его можно было двигать. Не могу найти..
Сообщение отредактировал breeve - 17.5.2010, 9:36 |
|
|
kibsoft |
17.5.2010, 11:04
Сообщение
#2
|
Участник Группа: Участник Сообщений: 180 Регистрация: 21.7.2009 Из: Самара Пользователь №: 928 Спасибо сказали: 14 раз(а) Репутация: 2 |
Сабж. Есть popup окно и нужно сделать чтобы его можно было двигать. Не могу найти.. Ну обрабатывать на QWidget::mousePressEvent(),, заканчивать на QWidget::mouseReleaseEvent(). Когда клавиша зажата, то обрабатывать событие QWidget::mouseMoveEvent()(двигать виджет настолько, насколько подвинут курсор), предварительно включив QWidget::setMouseTracking() у виджета. Примерно так. |
|
|
Litkevich Yuriy |
17.5.2010, 12:21
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
breeve |
17.5.2010, 12:36
Сообщение
#4
|
Участник Группа: Участник Сообщений: 188 Регистрация: 26.12.2009 Пользователь №: 1336 Спасибо сказали: 9 раз(а) Репутация: 1 |
Не понятно каким образом двигать?
Переопределяю mousePressEvent. Пишу, если нажата левая клавиша то.. А двигать то как? В ручную? Каким обрабатывать событие QWidget::mouseMoveEvent()? Сообщение отредактировал breeve - 17.5.2010, 12:38 |
|
|
Litkevich Yuriy |
17.5.2010, 12:39
Сообщение
#5
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
А двигать то как? В ручную? ну почти. В обработчике нажатия ставь флажок "начали двигать", в обработчике отпускания снимай его. А в обработчике движения смотри. если флажок стоит, спрашивай у объекта события текущее смещение координаты и на это смещение двигай виджет.
|
|
|
breeve |
17.5.2010, 12:47
Сообщение
#6
|
Участник Группа: Участник Сообщений: 188 Регистрация: 26.12.2009 Пользователь №: 1336 Спасибо сказали: 9 раз(а) Репутация: 1 |
Сообщение отредактировал breeve - 17.5.2010, 12:49 |
|
|
Litkevich Yuriy |
17.5.2010, 12:52
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
чёт я с событием колеса перепутал, у этого нет дельты, её надо самому считать, т.е. при нажатии запоминать текущую, а при перемещении вычислять дельту.
П.С. в доке по mouseMoveEvent для перемещения виджетов настоятельно рекомендуют использовать QMouseEvent::globalPos вместо всех остальных вариантов |
|
|
breeve |
17.5.2010, 13:14
Сообщение
#8
|
Участник Группа: Участник Сообщений: 188 Регистрация: 26.12.2009 Пользователь №: 1336 Спасибо сказали: 9 раз(а) Репутация: 1 |
Вот если кому надо, рабочий вариант:
Остался один не понятный момент. Если у меня окно стоит с флагом Qt::Window. То все работает правильно. Если же я выставляю Qt::ToolTip или Qt::Popup, то если я хоть раз нажму на другое окно то я больше не смогу его сдвинуть. Не понятно почему. Сообщение отредактировал breeve - 17.5.2010, 13:12 |
|
|
Litkevich Yuriy |
17.5.2010, 16:50
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
gxoptg |
14.12.2011, 20:38
Сообщение
#10
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 18.8.2011 Пользователь №: 2817 Спасибо сказали: 0 раз(а) Репутация: 0 |
Цитата
а зачем вообще этот фрагмент? без него всё нормально работает, и заодно исправляется это: Цитата Если же я выставляю Qt::ToolTip или Qt::Popup, то если я хоть раз нажму на другое окно то я больше не смогу его сдвинуть. Не понятно почему.
|
|
|
Текстовая версия | Сейчас: 27.12.2024, 0:56 |