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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сэмулировать наведение мышки на виджет  (Прочитано 5599 раз)
pakulo
Гость
« : Июль 11, 2007, 11:26 »

Есть виджет, который в зависимости от координат курсора рисует на виджете обьекты в специальном цвете...
Через некоторое время вызывается событие которое меняет обьекты местами и мне нужно вызвать (сэмулировать) событие наведение курсора на виджет, что бы обьекты нарисовались в своих цветах в зависимости от позиции курсора...

Обрабатываю наведение так:
bool event(QEvent *e)
{
if (e->type() == QEvent::MouseMove)
...
}

Хотел сделать так
event(new QMouseEvent(...))
Но не знаю как задать параметры, а именно позцию курсора относительно виджета, глобальную и т.п. Ну если знать позицию курсора глобальную то можно и относительно виджета получить... но может как-то проще можно все это сделать?
Записан
WW
Гость
« Ответ #1 : Июль 11, 2007, 11:32 »

а void QCoreApplication::postEvent ( QObject * receiver, QEvent * event )   [static]  не поможет?
Записан
pakulo
Гость
« Ответ #2 : Июль 11, 2007, 12:16 »

А как его использовать?
Я могу сделать и так event(QEvent *)
Но мне нужно создать обьект QEvent...
Записан
SABROG
Гость
« Ответ #3 : Июль 11, 2007, 12:51 »

Цитировать

Public Functions
QMouseEvent ( Type type, const QPoint & position, Qt::MouseButton button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers )
QMouseEvent ( Type type, const QPoint & pos, const QPoint & globalPos, Qt::MouseButton button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers )
Qt::MouseButton button () const
Qt::MouseButtons buttons () const
const QPoint & globalPos () const
int globalX () const
int globalY () const
const QPoint & pos () const
int x () const
int y () const
1 public function inherited from QInputEvent
6 public functions inherited from QEvent


Как-то так:
Код:

QMouseEvent *miceEv = new QMouseEvent(QEvent::MouseMove,QPoint(10,20), Qt::NoButton, Qt::NoButton, Qt::NoModifier);
postEvent(myWidget, miceEv);
Записан
pakulo
Гость
« Ответ #4 : Июль 11, 2007, 14:45 »

Да, именно так...
Но вот я не знаю как получить координаты курсора...
Прочитал в ассистенте "globalPos() may differ a lot from the current pointer position QCursor::pos()". Т.е. я могу через статическую QCursor::pos() получить координаты курсора, отнять координаты окна и виджета и полуту нужные мне координаты... Но что значит эта фраза?
Записан
Sergeich
Гость
« Ответ #5 : Июль 11, 2007, 16:29 »

Код:
QPoint pos = QCursor::pos();
QMouseEvent *miceEv = new QMouseEvent(QEvent::MouseMove, myWidget->mapFromGlobal(pos), Qt::NoButton, Qt::NoButton, Qt::NoModifier);
postEvent(myWidget, miceEv);


добавлено спустя 13 минут:

 
Цитировать
Returns the global position of the mouse pointer at the time of the event. This is important on asynchronous window systems like X11. Whenever you move your widgets around in response to mouse events, globalPos() may differ a lot from the current pointer position QCursor::pos(), and from QWidget::mapToGlobal( pos() ).
Перевод:
Цитировать
Возвращает глобальную позицию указателя мыши во время (генерации!) события. Это важно для асинхронных оконных систем, таких как X11. Всякий раз, когда вы перемещаете ваши виджеты в ответ на события мыши, globalPos() может значительно отличаться от текущей позиции курсора  QCursor::pos() и от QWidget::mapToGlobal( pos() ).
Учи албанский Подмигивающий
Записан
pakulo
Гость
« Ответ #6 : Июль 11, 2007, 21:48 »

Цитата: "Sergeich"
Учи албанский Подмигивающий

Стараюсь... Спасибо большое!!!!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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