그래서 특정 버튼을 계속 누르고 있으면 오디오 장치가 재생되고 버튼을 놓으면 오디오 장치가 중지되는 응용 프로그램이 있습니다. 내가 발표하지 않은 사실에도 불구하고 key_0 pressed
및 key_0 released
중 연속 인쇄를 볼 수QKeyEvent isAutoRepeat가 작동하지 않습니까?
void MainWindow::keyPressEvent(QKeyEvent *event)
{
if(event->isAutoRepeat())
{
event->ignore();
}
else
{
if(event->key() == Qt::Key_0)
{
qDebug()<<"key_0 pressed"<<endl;
}
else
{
QWidget::keyPressEvent(event);
}
}
}
void MainWindow::keyReleaseEvent(QKeyEvent *event)
{
if(event->isAutoRepeat())
{
event->ignore();
}
else
{
if(event->key() == Qt::Key_0)
{
qDebug()<<"key_0 released"<<endl;
}
else
{
QWidget::keyReleaseEvent(event);
}
}
}
그러나 분명히 isAutoRepeat
기능이 작동하지 않습니다 : 나는 아래의 코드와 유사하다이를 구현하기 위해 keyPressEvent
및 KeyReleaseEvent
를 사용 내가 누른 후 0 키. 내 코드가 잘못되었거나 다른 것이 잘못 되었습니까?
감사합니다.
편집
나는 MainWindow
가 키보드 포커스를 잃으면 때문에 이런 일이 생각합니다. 실제로 어떤 위젯에 포커스가 있는지를 어떻게 알 수 있습니까? Qt::Key_0
을 눌렀을 때 실제로 위젯을 사용하고 있지만, 위젯을 모두 Qt::NoFocus
으로 설정했다고 생각합니다. 작동하지 않는 것 같습니다.
내가하는 위젯 알고 노력하고있어 다음을 수행하여 초점이 있습니다
QWidget * wigdet = QApplication::activeWindow();
qDebug()<<wigdet->accessibleName()<<endl;
를하지만 항상 빈 문자열을 인쇄합니다. 키보드 포커스가있는 위젯의 이름을 인쇄하려면 어떻게해야합니까?
클래스가'MainWindow' 또는'ConsoleMainWindow'입니까? 귀하의 질문에 오타가있는 것 같아 – IAmInPLS
둘째, 귀하의 코드는 나를 위해 작동하고 그냥 그것을 테스트했습니다. 문서는 "이벤트가 자동 반복으로 인한 다중 키 압축 이벤트 인 경우이 함수는 true 또는 false로 불확정성을 반환 할 수 있습니다." 이 경우에 당신이 있습니까? – IAmInPLS
@IAmInPLS 미안하지만 오타였습니다. 내 수업은 MainWindow입니다. –