我想问一下关于qt的QTreeWidget里的1到9按键响应屏蔽,但是不能屏蔽上下键。重写keyPressEvent,1到9仍然会响应。添加tab键,直接1到9和上下键都不能响应了。只要屏蔽1到9,还有没有其他方法了?
void WidgetMain::keyPressEvent(QKeyEvent *e)
{
if(!e->isAutoRepeat())//此方法的作用是用于判断当前按键是否重复按下
{
if(e->key()<=0x30 && e->key()>=0x39 )
{
qDebug()<<"1-9:"<<e->key();//tab and shift tab
return;
}
switch(e->key())
{
case Qt::Key_F1:key_f1_press();break;
case Qt::Key_Return:key_return_press();break;
case Qt::Key_F2:key_f2_press();break;
case Qt::Key_F3:key_f3_press();break;
case Qt::Key_Up: qDebug()<<"UP:"<<e->key(); break;
case Qt::Key_Down: qDebug()<<"Down:"<<e->key(); break;
}
}
如果问题解决,麻烦点个采纳!
if(e->key()<=0x30 && e->key()>=0x39 )
你这里不应该是 >= 0x30 && <= 0x39么
如果还是不行,那就老老实实的写完他吧,不要用区间进行判断了
在头文件里定义全局变量Num_Lock
switch(e->key())
{
case Qt::Key_F1:key_f1_press();break;
case Qt::Key_Return:key_return_press();break;
case Qt::Key_F2:key_f2_press();break;
case Qt::Key_F3:key_f3_press();break;
case Qt::Key_F6:testpic();break;
case Qt::Key_NumLock: NumLock_press(); qDebug()<<"NumLock"<<Num_Lock; break;
case Qt::Key_0:
case Qt::Key_1:
case Qt::Key_2:
case Qt::Key_3:
case Qt::Key_4:
case Qt::Key_5:
case Qt::Key_6:
case Qt::Key_7:
case Qt::Key_8:
case Qt::Key_9:
default: qDebug()<<"default:"<<e->key();
// e->ignore();
break;
}
void WidgetMain::NumLock_press()
{
Num_Lock++;
if(Num_Lock==1)
{
QMessageBox::information(this,tr("提示"),tr("数字键盘已锁定:8代表向上,2代表向下。"),QMessageBox::Ok);
Num_Lock++;
}else
{
QMessageBox::information(this,tr("提示"),tr("数据键盘已开启:请使用上下键控制。"),QMessageBox::Ok);
Num_Lock=0;
}
}
重写Ke_0到key_9,对tressweight里的列表控制仍然存在,0到9仍然会随机控制。
case Qt::Key_NumLock: NumLock_press(); qDebug()<<"NumLock"<<Num_Lock; break;//用了键盘锁。
主要原因可能是焦点问题。主要问题是对于tressweght里显示的列表,重写key_0到key_9,按0到9仍然会随机跳转。查了一下,0到9对应两份地址码。可以尝试把两套都排除掉。