crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Перемещение окна за любую его часть
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
gxoptg Дата 14.12.2011, 20:38
 
Цитата
if(!p.contains(lastPoint))
            return;

а зачем вообще этот фрагмент? без него всё нормально работает, и заодно исправляется это:
Цитата
Если же я выставляю Qt::ToolTip или Qt::Popup, то если я хоть раз нажму на другое окно то я больше не смогу его сдвинуть. Не понятно почему.
Litkevich Yuriy Дата 17.5.2010, 16:50
 
Цитата(breeve @ 17.5.2010, 17:14) *
Если же я выставляю Qt::ToolTip или Qt::Popup, то если я хоть раз нажму на другое окно то я больше не смогу его сдвинуть. Не понятно почему.
ну добавь в обработчики отладочные сообщения, и посмотри. Заходит ли программа в них или нет
breeve Дата 17.5.2010, 13:14
  Вот если кому надо, рабочий вариант:
void Console::mousePressEvent(QMouseEvent *event)
{
    QRect p = this->geometry();
    if(event->button() == Qt::LeftButton)
    {
        lastPoint = event->pos();        
        if(!p.contains(lastPoint))
            return;
        b_move = true;
    }
}

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

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


Остался один не понятный момент. Если у меня окно стоит с флагом Qt::Window. То все работает правильно. Если же я выставляю Qt::ToolTip или Qt::Popup, то если я хоть раз нажму на другое окно то я больше не смогу его сдвинуть. Не понятно почему.
Litkevich Yuriy Дата 17.5.2010, 12:52
  чёт я с событием колеса перепутал, у этого нет дельты, её надо самому считать, т.е. при нажатии запоминать текущую, а при перемещении вычислять дельту.

П.С. в доке по mouseMoveEvent для перемещения виджетов настоятельно рекомендуют использовать QMouseEvent::globalPos вместо всех остальных вариантов
breeve Дата 17.5.2010, 12:47
 
void Console::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {
        b_move = true;
    }
}
void Console::mouseMoveEvent(QMouseEvent *event)
{
    if((event->buttons() & Qt::LeftButton) && b_move)
        move(event->pos());
}
void Console::mouseReleaseEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton && b_move) {
            b_move = false;
        }
}
Litkevich Yuriy Дата 17.5.2010, 12:39
 
Цитата(breeve @ 17.5.2010, 16:36) *
А двигать то как? В ручную?
ну почти. В обработчике нажатия ставь флажок "начали двигать", в обработчике отпускания снимай его. А в обработчике движения смотри. если флажок стоит, спрашивай у объекта события текущее смещение координаты и на это смещение двигай виджет.
breeve Дата 17.5.2010, 12:36
  Не понятно каким образом двигать?
Переопределяю mousePressEvent. Пишу, если нажата левая клавиша то.. А двигать то как? В ручную?
Каким обрабатывать событие QWidget::mouseMoveEvent()?
Litkevich Yuriy Дата 17.5.2010, 12:21
 
Цитата(kibsoft @ 17.5.2010, 15:04) *
предварительно включив QWidget::setMouseTracking()
если мыша двигается с нажатой кнопкой, то слежение включается автоматически.
kibsoft Дата 17.5.2010, 11:04
 
Цитата(breeve @ 17.5.2010, 10:35) *
Сабж. Есть popup окно и нужно сделать чтобы его можно было двигать. Не могу найти..

Ну обрабатывать на QWidget::mousePressEvent(),, заканчивать на QWidget::mouseReleaseEvent(). Когда клавиша зажата, то обрабатывать событие QWidget::mouseMoveEvent()(двигать виджет настолько, насколько подвинут курсор), предварительно включив QWidget::setMouseTracking() у виджета.
Примерно так.
breeve Дата 17.5.2010, 9:35
  Сабж. Есть popup окно и нужно сделать чтобы его можно было двигать. Не могу найти..
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.5.2024, 4:32