Russian Qt Forum
Июля 07, 2025, 06:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перетаскивание виджета в программе  (Прочитано 6087 раз)
Kirill_m
Гость
« : Сентября 27, 2012, 14:17 »

Как можно сделать и можно ли сделать, так чтобы можно было передвигать виджеты в программе.
То-есть зажал на виджете левой кн. мыши и перетащил в другое место. Непонимающий
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Сентября 27, 2012, 14:21 »

http://qt-project.org/doc/qt-4.8/qmouseevent.html
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Kirill_m
Гость
« Ответ #2 : Сентября 27, 2012, 14:42 »

Спасибо буду изучать.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Сентября 27, 2012, 14:44 »

Если быть точнее, тебе нужно:
http://qt-project.org/doc/qt-4.8/qwidget.html#mousePressEvent
http://qt-project.org/doc/qt-4.8/qwidget.html#mouseMoveEvent
http://qt-project.org/doc/qt-4.8/qwidget.html#mouseReleaseEvent
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Сентября 27, 2012, 14:45 »

Ну, и, конечно, поиск по форуму рулит. Подмигивающий
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Kirill_m
Гость
« Ответ #5 : Октября 06, 2012, 12:20 »

Сделал вот так:
Код:
void Sensor::mousePressEvent(QMouseEvent *event)
{
    QRect p = this->geometry();
    if(event->button() == Qt::LeftButton)
    {
        lastPoint = event->pos();
        b_move = true;
    }
}

void Sensor::mouseMoveEvent(QMouseEvent *event)
{
    if((event->buttons() & Qt::LeftButton) && b_move)
        move(event->globalX()-lastPoint.x(),
             event->globalY()-lastPoint.y());
}

void Sensor::mouseReleaseEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton && b_move) {
            b_move = false;
        }
}

Все хорошо, НО когда зажимаешь виджет он смещается, сильно где то в середину окна.
Записан
Bepec
Гость
« Ответ #6 : Октября 06, 2012, 12:29 »

Координаты бывают глобальные(абсолютные), относительно  виджета (то, что ты в евентах получаешь).

Так что используй ф-ции mapToGlobal();
Записан
Kirill_m
Гость
« Ответ #7 : Октября 06, 2012, 13:00 »

Координаты бывают глобальные(абсолютные), относительно  виджета (то, что ты в евентах получаешь).

Так что используй ф-ции mapToGlobal();
А можно поточнее где именно использовать?
Код:
void Sensor::mousePressEvent(QMouseEvent *event)
{
    QRect p = this->geometry();
    if(event->button() == Qt::LeftButton)
    {
        lastPoint = mapToGlobal(event->pos());
        b_move = true;
    }
}
Сбрасывает расположение в 0,0
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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