在网上找了很多,就是没找到键盘事件触发单选框选中的,反复读网上的资料和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) 可以设置为是否被选中