Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Keory
0 / 0 / 0
Регистрация: 20.06.2019
Сообщений: 8
1

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

06.07.2019, 22:36. Просмотров 1864. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2019, 22:36
Ответы с готовыми решениями:

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

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

C++ события нажатия клавиатуры
помогите сделать мини программу, при нажатии на alt-x-f выводилось messagebox с текстом на...

Объяснить с примерами, как использовать события клавиатуры в С++
Здравствуйте. Вопрос немного ламерский, но может кто-нибудь сможет объяснить с примерами, как...

Выполнение команд, вводимых пользователем с клавиатуры (ООП + события)
Цель: Получить практические навыки разработки объектно-ориенти-рованной программы, управляемой...

7
Байт
Эксперт C
22307 / 14056 / 2970
Регистрация: 24.12.2010
Сообщений: 29,959
07.07.2019, 09:26 2
Лучший ответ Сообщение было отмечено Keory как решение

Решение

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

Решение

Цитата Сообщение от Keory Посмотреть сообщение
Если несложно,
Выделяешь мышкой код. Потом щелкаешь на иконке "C++QT" (над ответом средний ряд посередке)
Получится так, как тебе сделали модераторы. И читать приятнее, и ошибки видны, и строки пронумерованы.
Удачи!
1
07.07.2019, 15:58
peter_irich
76 / 69 / 22
Регистрация: 18.10.2017
Сообщений: 646
07.07.2019, 16:43 5
У меня в keyPressEventQkeyEvent *ke) есть оператор
C++ (Qt)
1
2
if (ke->isAutoRepeat())
 goto end;
и
C++ (Qt)
1
2
end: QMainWindow::keyPressEvent(ke);
 return;
это не к тому же?
0
Байт
Эксперт C
22307 / 14056 / 2970
Регистрация: 24.12.2010
Сообщений: 29,959
07.07.2019, 22:34 6
Цитата Сообщение от peter_irich Посмотреть сообщение
это не к тому же?
Просто посмотрите в доке что и когда этот метод должен возвращать.
В случае с ТС метод должен возвращать true, если он сам справился с обработкой события. И false в противном случае. То есть, если надо продолжить обработку так, как предусмотрено в Qt.
Что происходит в вашем методе - попробуйте разобраться сами.
0
peter_irich
76 / 69 / 22
Регистрация: 18.10.2017
Сообщений: 646
08.07.2019, 20:55 7
Насколько я помню, мой вариант не пропускает события нажатия, возникающие при удержании клавиши.
Также мой keyPressEvent() в целом возвращает true или само событие в QMainwindow(),
если он его не обработал.
0
Байт
Эксперт C
22307 / 14056 / 2970
Регистрация: 24.12.2010
Сообщений: 29,959
08.07.2019, 22:18 8
Цитата Сообщение от peter_irich Посмотреть сообщение
или само событие в QMainwindow(),
Посмотрите внимательно, что именно возвращает ваш метод. Событие он никоим образом возвращать не может. Он возвращает Да или Нет. Отсюда и плясать.
Я сейчас не буду смотреть хедеры и доки. Но ваш метод должон возвращать что-то определенное. Или событие, или бульку, или просто ничего.
0
08.07.2019, 22:18
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2019, 22:18

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.