Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: vol4enok от Май 21, 2009, 17:45



Название: перемещение двух окон одновременно
Отправлено: vol4enok от Май 21, 2009, 17:45
Здравствуйте
проблема такая: есть QWidget и как бы связанный с ним (расположенный рядом) QDialog. Как сделать, чтобы при перемещении QWidget QDialog сам за ним перемещался?
была попытка сделать через QMoveEvent, но там перемещение второго окна происходит только в момент отпускания мыши...


Название: Re: перемещение двух окон одновременно
Отправлено: lit-uriy от Май 21, 2009, 18:38
попробуй через mouseMoveEvent(QMouseEvent *event)


Название: Re: перемещение двух окон одновременно
Отправлено: vol4enok от Май 22, 2009, 10:02
вообще ничего не перемещается... может я что-то не так делаю?
Код:
void widget::mouseMoveEvent(QMouseEvent *e)
{
QPoint p=e->pos();
dialog->move(p.x() + this->width(), p.y());
}


Название: Re: перемещение двух окон одновременно
Отправлено: EhTemka от Май 22, 2009, 12:38
Добавь строку

Код
C++ (Qt)
void widget::mouseMoveEvent(QMouseEvent *e)
{
QPoint p=e->pos();
dialog->move(p.x() + this->width(), p.y());
 
QWidget::mouseMoveEvent(e);
 
}
 


Название: Re: перемещение двух окон одновременно
Отправлено: vol4enok от Май 22, 2009, 13:00
это работает только если перемещать курсор мыши при нажатой кнопке в активной области widget.


Название: Re: перемещение двух окон одновременно
Отправлено: ¤Se®ega¤ от Май 30, 2009, 14:25
"По умолчанию метод mouseMoveEvent () вызывается при перемещении указателя мыши, но только при предварительном нажатии одной из кнопок мыши. Это позволяет не создавать лишних событий во время простого перемещения указателя. Если же нужно получать события перемещения указателя мыши, то тогда нужно воспользоваться методом setMouseTrackingO класса QWidget, передав ему в параметре значение true."  (М.Шлее)
 при объявлении класса я вызывал this->setMouseTracking(TRUE);  и тогда просто при перемещении присходит обработка события.


Название: Re: перемещение двух окон одновременно
Отправлено: Alex Custov от Май 31, 2009, 18:42
Код
C++ (Qt)
#include <QtGui>
 
class W : public QWidget
{
   public:
       W(QWidget *stick) : QWidget(), sticked(stick)
       {}
 
   protected:
       virtual void moveEvent(QMoveEvent *e)
       {
           e->accept();
           sticked->move(pos() + QPoint(frameGeometry().width(), 0));
       }
 
   private:
       QWidget *sticked;
};
 
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
 
   QWidget *s = new QWidget;
   s->resize(320, 200);
   s->show();
 
   W *w = new W(s);
   w->resize(220, 180);
   w->show();
 
   return app.exec();
}
 

всё работает :)

Дополнение Ах да, ни mouseMoveEvent() ни setMouseTracking() тут совершенно не помогут.


Название: Re: перемещение двух окон одновременно
Отправлено: vol4enok от Июнь 01, 2009, 19:11
спасибо за ответы.

всё работает :)

работает, но не совсем так, как нужно. Перемещение происходит в момент, когда отпускается кнопка мыши, а нужно поступательное перемещение, чтобы второе окно "бегало" за первым до отпускания кнопки мыши.

"По умолчанию метод mouseMoveEvent () вызывается при перемещении указателя мыши, но только при предварительном нажатии одной из кнопок мыши. Это позволяет не создавать лишних событий во время простого перемещения указателя. Если же нужно получать события перемещения указателя мыши, то тогда нужно воспользоваться методом setMouseTrackingO класса QWidget, передав ему в параметре значение true."  (М.Шлее)
 при объявлении класса я вызывал this->setMouseTracking(TRUE);  и тогда просто при перемещении присходит обработка события.

mouseMoveEvent обрабатывает перемещения в активной области окна, а когда я перетаскиваю за "шапку", то реакции на событие вообще никакой (может только у меня так глючит)


Название: Re: перемещение двух окон одновременно
Отправлено: Alex Custov от Июнь 01, 2009, 19:34
работает, но не совсем так, как нужно. Перемещение происходит в момент, когда отпускается кнопка мыши, а нужно поступательное перемещение, чтобы второе окно "бегало" за первым до отпускания кнопки мыши.

Как настроено движение окна в системе? "показывать содержимое при перемещении" или нет?