QT键盘事件+单选框

在网上找了很多,就是没找到键盘事件触发单选框选中的,反复读网上的资料和QT源码(反复读,是因为自己不细心,浪费掉很多时间,这个要改),然后恍然大悟,一点都不难

需求:

1.使用按键,读取按键的内容,遇到与固定值匹配的值,将单选框呈(未)选中状态

2.随键盘操作人员意愿删除原先按键按下的值

主要代码如下( 加qDebug()是为了测试、验证 ):


 QString keyText;

 void MainWindow::keyPressEvent( QKeyEvent *event )
{
    QString checkFixed = "ABCD";

    QString uncheckFixed = "BCDA";

    QString checkState;

    QString key = event->text();

    keyText += key;

    //若按键按下的值等于“ABCD”,则单选框呈选中状态
    if( keyText == checkFixed )
    {
        ui->radioButton->setChecked( true );

        checkState = ui->radioButton->isChecked() ? "Checked" : "Unchecked";

        qDebug() << checkState;
    }

    //若按键按下的值等于“BCDA”,则单选框呈未选中状态
    if( keyText == uncheckFixed )
    {
        ui->radioButton->setChecked( false );

        checkState = ui->radioButton->isChecked() ? "Checked" : "Unchecked";

        qDebug() << checkState;

    }

    //    同时选中“Ctrl”和“Z”键,单选框呈未选中状态
    if( ( event->modifiers() == Qt::ControlModifier ) && ( event->key() ==Qt::Key_Z ) )
    {
        ui->radioButton->setChecked( false );

        checkState = ui->radioButton->isChecked() ? "Checked" : "Unchecked";

        qDebug() << checkState;
    }
    
    //若按下Delete键,则清除原先按键按下的值
    if( event->key() == Qt::Key_Delete )
    {
        keyText.clear();
    }

}



  • 主要知识点: 
  • 键盘事件中,QString QKeyEvent::text() const可以读取字符,

                      int QKeyEvent::key() const只能读取某一个键

  • 单选框中,它的 setChecked(bool) 可以设置为是否被选中

猜你喜欢

转载自blog.csdn.net/Huahua12342234/article/details/81513559