Russian Qt Forum

Qt => Общие вопросы => Тема начата: pakulo от Июль 11, 2007, 11:26



Название: Сэмулировать наведение мышки на виджет
Отправлено: pakulo от Июль 11, 2007, 11:26
Есть виджет, который в зависимости от координат курсора рисует на виджете обьекты в специальном цвете...
Через некоторое время вызывается событие которое меняет обьекты местами и мне нужно вызвать (сэмулировать) событие наведение курсора на виджет, что бы обьекты нарисовались в своих цветах в зависимости от позиции курсора...

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

Хотел сделать так
event(new QMouseEvent(...))
Но не знаю как задать параметры, а именно позцию курсора относительно виджета, глобальную и т.п. Ну если знать позицию курсора глобальную то можно и относительно виджета получить... но может как-то проще можно все это сделать?


Название: Сэмулировать наведение мышки на виджет
Отправлено: WW от Июль 11, 2007, 11:32
а void QCoreApplication::postEvent ( QObject * receiver, QEvent * event )   [static]  не поможет?


Название: Сэмулировать наведение мышки на виджет
Отправлено: pakulo от Июль 11, 2007, 12:16
А как его использовать?
Я могу сделать и так event(QEvent *)
Но мне нужно создать обьект QEvent...


Название: Сэмулировать наведение мышки на виджет
Отправлено: SABROG от Июль 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 от Июль 11, 2007, 14:45
Да, именно так...
Но вот я не знаю как получить координаты курсора...
Прочитал в ассистенте "globalPos() may differ a lot from the current pointer position QCursor::pos()". Т.е. я могу через статическую QCursor::pos() получить координаты курсора, отнять координаты окна и виджета и полуту нужные мне координаты... Но что значит эта фраза?


Название: Сэмулировать наведение мышки на виджет
Отправлено: Sergeich от Июль 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 от Июль 11, 2007, 21:48
Цитата: "Sergeich"
Учи албанский ;)

Стараюсь... Спасибо большое!!!!