Считывание нажатия на клавиатуру

130
25 марта 2022, 17:10

Как можно считать нажатие клавиши за одно, а не в стандартной форме: сигнал - пауза - сигнал (пока происходит нажатие)?

Мне нужно что бы эта форма была такой: нажатие клавиши - непрекращающийся сигнал.

Я попытался считывать нажатие в этой стандартной форме и приравнивать булевое значение - True, а когда клавиша будет отжата, то False, но в итоге все работало инверсивно и с задержкой.

void Widget::keyPressEvent(QKeyEvent *Kevent){
    if (Kevent->key() == Qt::Key_A){
        bt = true; 
    }
}
void Widget::keyReleaseEvent(QKeyEvent *Revent){
    if (Revent->key() == Qt::Key_A){
        bt = false;
    }
}

как можно считывать нажатую клавишу по человечески?

Answer 1

Можно через таймер:

Widget::Widget(): _timer() {
    // Гавкаем "наружу" при нажатой клавише
    connect(&_timer, &QTimer::timeout, this, &Widget::wofwof);
}
void Widget::keyPressEvent(QKeyEvent *Kevent){
    if (Kevent->key() == Qt::Key_A)
        _timer.start(1000); // Частота 1 сек       
}
void Widget::keyReleaseEvent(QKeyEvent *Revent){
    // Таймер работает - значит была нажата нужная клавиша
    if( _timer.isActive() )
        _timer.stop();
}

Заголовок:

class Widget : public QWidget {
    Q_OBJECT
public:
    Widget();
    void keyPressEvent(QKeyEvent *Kevent);
    void keyReleaseEvent(QKeyEvent *Kevent);
signals:
    void wofwof();
private:
    QTimer _timer;
}
READ ALSO
Хранение абстрактного типа в stl::vector C++ [дубликат]

Хранение абстрактного типа в stl::vector C++ [дубликат]

Пытаюсь хранить в контейнере абстрактный тип "Weapon", но возникает ошибкаКод:

106
MySQL не записывает большой текст

MySQL не записывает большой текст

Текст (10 000+ символов) при записи в БД обрезается, записывается не весьТекст меньшего размера записывается полностью

145
Проблема с отображением символов в mysql

Проблема с отображением символов в mysql

Пишу бота ВК на pythonИспользую mysql

122