Функция: Когда я нажимаю клавишу один раз, вызывается keyPress, слот, связанный с QTimer, вызывается один раз, KeyReleased вызывается, QTimer останавливается. Когда я продолжаю нажимать клавишу «вверх», клавиша «Нажата» вызывается, слот на QTimer вызывается каждые 2 секунды, когда я отпускаю клавишу вверх, вызывается KeyReleased, QTimer останавливается. Все идет хорошо без QMessageBox. Проблема: Когда я добавляю QMessageBox в слот, KeyReleased никогда не будет вызываться и QTimer никогда не будет останавливаться.
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
connect(&m_keyUpTimer, &QTimer::timeout, this, &MainWindow::slotKeyUpTimerTimeOut);
}
MainWindow::~MainWindow()
{
}
void MainWindow::keyPressEvent( QKeyEvent * e)
{
if (e->isAutoRepeat()) {
return;
}
switch (e->key()) {
case Qt::Key_Up:
{
QMessageBox errorMsg;
errorMsg.setWindowTitle("Press");
errorMsg.show();
if (!m_keyUpTimer.isActive() ) {
m_keyUpTimer.start(2000);
}
break;
}
default: break;
}
}
void MainWindow::keyReleaseEvent(QKeyEvent * e)
{
if (e->isAutoRepeat()) {
return;
}
switch (e->key()) {
case Qt::Key_Up:
{
m_keyUpTimer.stop();
QMessageBox errorMsg;
errorMsg.setWindowTitle("Release");
errorMsg.show();
break;
}
default: break;
}
}
void MainWindow::slotKeyUpTimerTimeOut() const
{
QMessageBox errorMsg;
errorMsg.setWindowTitle("Slot");
errorMsg.show();
}
Извините за мой плохой английский sh.