Russian Qt Forum
Сентябрь 30, 2024, 22:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: перемещение двух окон одновременно  (Прочитано 6147 раз)
vol4enok
Гость
« : Май 21, 2009, 17:45 »

Здравствуйте
проблема такая: есть QWidget и как бы связанный с ним (расположенный рядом) QDialog. Как сделать, чтобы при перемещении QWidget QDialog сам за ним перемещался?
была попытка сделать через QMoveEvent, но там перемещение второго окна происходит только в момент отпускания мыши...
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Май 21, 2009, 18:38 »

попробуй через mouseMoveEvent(QMouseEvent *event)
Записан

Юра.
vol4enok
Гость
« Ответ #2 : Май 22, 2009, 10:02 »

вообще ничего не перемещается... может я что-то не так делаю?
Код:
void widget::mouseMoveEvent(QMouseEvent *e)
{
QPoint p=e->pos();
dialog->move(p.x() + this->width(), p.y());
}
Записан
EhTemka
Гость
« Ответ #3 : Май 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);
 
}
 
Записан
vol4enok
Гость
« Ответ #4 : Май 22, 2009, 13:00 »

это работает только если перемещать курсор мыши при нажатой кнопке в активной области widget.
Записан
¤Se®ega¤
Гость
« Ответ #5 : Май 30, 2009, 14:25 »

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

Сообщений: 2063


Просмотр профиля
« Ответ #6 : Май 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() тут совершенно не помогут.
« Последнее редактирование: Май 31, 2009, 18:45 от AX » Записан
vol4enok
Гость
« Ответ #7 : Июнь 01, 2009, 19:11 »

спасибо за ответы.

всё работает Улыбающийся

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

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

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

Сообщений: 2063


Просмотр профиля
« Ответ #8 : Июнь 01, 2009, 19:34 »

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

Как настроено движение окна в системе? "показывать содержимое при перемещении" или нет?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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