Название: Как сделать перемещение курсора с клавиатуры в пределах окна программы? Отправлено: Crazy Sage от Март 06, 2009, 10:39 Надо сделать перемещение по стрелкам на 1 пиксель, с шифтом на 10
Насколько я понимаю надо сделать следующий обработчик: Код: void MainForm::keyEvent (QKeyEvent *event) но вот как сделать собственно смещение курсора и отслеживание его выхода за пределы главного окна? и как прицепить данный обработчик к главному окну, чтобы он вызывался каждый раз при нажатии на клавиатуру, если фокус ввода на программе? PS. QT версии 3, возможности перейти на 4ю нет. UPD: или для таких целей лучше использовать QAction с горячей кнопкой вида Key_Up \ SHIFT + Key_Up? тогда остается только вопрос про то, как смещать курсор и отслеживать выход за пределы окна Название: Re: Как сделать перемещение курсора с клавиатуры в пределах окна программы? Отправлено: Alex Custov от Март 06, 2009, 21:18 выход за пределы окна - leaveEvent()
двигаем курсор - QCursor::setPos(QCursor::pos()+QPoint(1,1)) фокус ввода бывает на окне, а не на программе. Если твоё окно в фокусе, оно будет получать нажатия клавиш, если нет то нет. Название: Re: Как сделать перемещение курсора с клавиатуры в пределах окна программы? Отправлено: Crazy Sage от Март 10, 2009, 08:42 Похоже я что-то не понимаю в обработке сигналов в QT
Решил для проверки сделать простейший обработчик, который ловит нажатие одной конкретной клавиши и сообщает, что поймал. Код выглядит следующим образом в .h файле главного окна: Код: protected: в .cpp файле главного окна: Код: void MainForm::keyPressEvent (QKeyEvent *event) в коде главного виджета - аналогично, только вместо Key_Z другая клавиша реакции на нажатие этих клавиш - ноль. Что я делаю не так? Название: Re: Как сделать перемещение курсора с клавиатуры в пределах окна программы? Отправлено: igor_bogomolov от Март 10, 2009, 10:14 В приведенном вами примере все нормально, код рабочий. Возможно дело в том, что до MainForm событие не доходит. Например из-за того что фокус находится на другом виджете, ну например QTextEdit или QDataTime.
Название: Re: Как сделать перемещение курсора с клавиатуры в пределах окна программы? Отправлено: Crazy Sage от Март 10, 2009, 10:42 А можно ли как-то узнать, кто ловит сигнал?
Очевидных QT'шных виджетов с клавиатурным вводом в программе нет, наши виджеты я вроде все проверил, клавиатуру никто не ловит. Название: Re: Как сделать перемещение курсора с клавиа& Отправлено: igor_bogomolov от Март 10, 2009, 10:50 Например, у меня на форме находится QTextEdit. Если фокус находится на этом виджете, он сам обрабатывает события нажатия клавиатуры, и дальше их не пропускает. Для того чтобы отловить нужное событие мне пришлось добавить eventFilter
textEdit->installEventFilter(this); Код: bool MainForm::eventFilter(QObject *target, QEvent *event) { Попробуй сделать также, что получится? Здесь же можно узнать кто принимает событие нажатия клавиатуры. P.S. Админам. Какие то краказыбры появляются после редактирования кода cpp Название: Re: Как сделать перемещение курсора с клавиатуры в пределах окна программы? Отправлено: Crazy Sage от Март 10, 2009, 11:17 на строку
if (event->type() == QEvent::KeyPress) выдает error: expected unqualified-id before numeric constant error: expected `)' before numeric constant Название: Re: Как сделать перемещение курсора с клавиатуры в пределах окна программы? Отправлено: BRE от Март 10, 2009, 11:20 на строку А ты QEvent подключи:if (event->type() == QEvent::KeyPress) выдает error: expected unqualified-id before numeric constant error: expected `)' before numeric constant #include <QEvent> Название: Re: Как сделать перемещение курсора с клавиатуры в пределах окна программы? Отправлено: igor_bogomolov от Март 10, 2009, 11:26 или #include <QtGui/QKeyEvent>. Этого должно быть достаточно
Название: Re: Как сделать перемещение курсора с клавиатуры в пределах окна программы? Отправлено: Crazy Sage от Март 10, 2009, 11:32 Вобще qevent.h подключен
А этот код он для 3й или для 4й версии QT? Потому что у меня 3я. Название: Re: Как сделать перемещение курсора с клавиатуры в пределах окна программы? Отправлено: igor_bogomolov от Март 10, 2009, 11:34 У меня Qt 4.5.0
Для 3й не знаю, не могу подсказать Название: Re: Как сделать перемещение курсора с клавиатуры в пределах окна программы? Отправлено: Crazy Sage от Март 10, 2009, 11:36 Ага. Ну во всяком случае ясно, в чем проблема. Буду разбираться с фильтрами в третьем QT
Название: Re: Как сделать перемещение курсора с клавиатуры в пределах окна программы? Отправлено: igor_bogomolov от Март 10, 2009, 12:13 Нашел в книге Макса Шлее. Нужно переопределить метод event().
Код
Название: Re: Как сделать перемещение курсора с клавиатуры в пределах окна программы? Отправлено: Crazy Sage от Март 10, 2009, 12:36 В итоге.
Компилятор упорно ругается на QEvent::KeyPress, хотя qevent.h подключен и компилятор его спокойно обнаруживает. Пока что заменил QEvent::KeyPress на 6, хотя не уверен, что это корректно. Ни с установкой eventFilter ни с переопределением event() клавиши не ловятся. Видимо буду ждать пока появится главный разработчик и спрашивать у него, что может перехватывать клавиатуру. Название: Re: Как сделать перемещение курсора с клавиа& Отправлено: igor_bogomolov от Март 10, 2009, 13:06 В архиве два примера из книги Шлее. Может они помогут разобраться в чем проблема. У самого тройки нет, так что не знаю чем еще помочь.
Название: Re: Как сделать перемещение курсора с клавиатуры в пределах окна программы? Отправлено: Crazy Sage от Март 10, 2009, 15:23 спасибо
Название: Re: Как сделать перемещение курсора с клавиатуры в пределах окна программы? Отправлено: Crazy Sage от Март 11, 2009, 10:12 Проблема, как водится, оказалась тупой до нельзя. В KDevelop'е слетел путь к исполняемому файлу на каталог с предыдущей версией программы, поэтому все изменения, которые я вносил не влияли на запускаемый файл.
Всем спасибо за участие. |