Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 20.06.2019
Сообщений: 13

События клавиатуры в Qt

06.07.2019, 22:36. Показов 2815. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Событие приходит 4 раза вместо одного, как исправить?
Посмотрел в qDebug(), так как в строку тоже не добавляется нужный символ.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
    str = ui->result_window->text();
 
    if(event->type() == QEvent::KeyPress)
    {
        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
 
        switch(keyEvent->key())
        {
        case Qt::Key_0:
            ui->result_window->text().append("0");
            qDebug() << str;
            break;
 
        case Qt::Key_1:
            ui->result_window->text().append("1");
            break;
 
        case Qt::Key_2:
            ui->result_window->text().append("2");
            break;
 
        case Qt::Key_3:
            ui->result_window->text().append("3");
            break;
 
        case Qt::Key_4:
            ui->result_window->text().append("4");
            break;
 
        case Qt::Key_5:
            ui->result_window->text().append("5");
            break;
 
        case Qt::Key_6:
            ui->result_window->text().append("6");
            break;
 
        case Qt::Key_7:
            ui->result_window->text().append("7");
            break;
 
        case Qt::Key_8:
            ui->result_window->text().append("8");
            break;
 
        case Qt::Key_9:
            ui->result_window->text().append("9");
            break;
 
        case Qt::Key_Delete:
            formatFlag = false;
 
            str = "";
 
            ui->result_window->setText("");
            break;
        default: ui->result_window->setText("Err");
        }
    }
 
    QObject::eventFilter(watched, event);
 
    return QMainWindow::eventFilter(watched, event);
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.07.2019, 22:36
Ответы с готовыми решениями:

Qt события клавиатуры
Подскажите как отловить событие нажатия клавиш Fn и PrtScr. Часто встречала предложение отлавливать через keyup и keydown,даже в нем нашла...

События клавиатуры в консольном приложении
Я пишу консольный файловый менеджер (на подобие Far'а, но больше под Linux). Но не пойму, как в консольном приложении можно получить...

QML События с клавиатуры
Здраствуйте, возможно ли получить события от клавиатуры компоненту у которого нет фокуса, используя только QML

7
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
07.07.2019, 09:26
Лучший ответ Сообщение было отмечено Keory как решение

Решение

Keory,
1. После своей обработки события поставь return true;
2. По Qt здесь есть раздел https://www.cyberforum.ru/qt/
3. Код следует оборачивать в теги. Умеешь? Могу научить.
1
0 / 0 / 0
Регистрация: 20.06.2019
Сообщений: 13
07.07.2019, 13:00  [ТС]
1.Спасибо, помогло.
3.Если несложно, то буду благодарен)
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
07.07.2019, 15:58
Лучший ответ Сообщение было отмечено Keory как решение

Решение

Цитата Сообщение от Keory Посмотреть сообщение
Если несложно,
Выделяешь мышкой код. Потом щелкаешь на иконке "C++QT" (над ответом средний ряд посередке)
Получится так, как тебе сделали модераторы. И читать приятнее, и ошибки видны, и строки пронумерованы.
Удачи!
1
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,380
07.07.2019, 16:43
У меня в keyPressEventQkeyEvent *ke) есть оператор
C++ (Qt)
1
2
if (ke->isAutoRepeat())
 goto end;
и
C++ (Qt)
1
2
end: QMainWindow::keyPressEvent(ke);
 return;
это не к тому же?
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
07.07.2019, 22:34
Цитата Сообщение от peter_irich Посмотреть сообщение
это не к тому же?
Просто посмотрите в доке что и когда этот метод должен возвращать.
В случае с ТС метод должен возвращать true, если он сам справился с обработкой события. И false в противном случае. То есть, если надо продолжить обработку так, как предусмотрено в Qt.
Что происходит в вашем методе - попробуйте разобраться сами.
0
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,380
08.07.2019, 20:55
Насколько я помню, мой вариант не пропускает события нажатия, возникающие при удержании клавиши.
Также мой keyPressEvent() в целом возвращает true или само событие в QMainwindow(),
если он его не обработал.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
08.07.2019, 22:18
Цитата Сообщение от peter_irich Посмотреть сообщение
или само событие в QMainwindow(),
Посмотрите внимательно, что именно возвращает ваш метод. Событие он никоим образом возвращать не может. Он возвращает Да или Нет. Отсюда и плясать.
Я сейчас не буду смотреть хедеры и доки. Но ваш метод должон возвращать что-то определенное. Или событие, или бульку, или просто ничего.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.07.2019, 22:18
Помогаю со студенческими работами здесь

События клавиатуры
пишу код onkeydown=function(){ if(event.keyCode==37){ left_scroll(); }else if(event.keyCode==39){ right_scroll(); ...

события от клавиатуры
Сводная таблица расширенных кодов Значение 2-го Соответствующие клавиши байта 15 ...

события клавиатуры в с++
Как сделать так что бы при нажатии на клавиатуру, дигалась картинка, и как додать картинку?спс)

События клавиатуры
Пытаюсь сделать управление блоком по сайту с помощью стрелок. Для стрелок влево и вправо работает а для вверх и вниз нет. &lt;div...

Lazarus события клавиатуры
Прочитав множество ненужных статей, так и не было мною найдена реализация события клавиатуры. Задача: При нажатии на клавишу совершать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru