.h文件中定义
/** 设置键盘按键状态 */
typedef enum
{
KEY_STATE_Release = 0, // 键盘按键状态Release
KEY_STATE_Press, // 键盘按键状态Press
}E_KEY_STATE;
E_KEY_STATE alt_key;
E_KEY_STATE ctrl_key;
E_KEY_STATE shift_key;
void keyPressEvent(QKeyEvent *event);
void keyReleaseEvent(QKeyEvent *event);
这里主要为了获取按键ctrl和alt以及shift按键按下和松开来达到对QTableWidget中的内容进行多选
//按键按下
void record::keyPressEvent(QKeyEvent *event)
{
switch(event->key())
{
case Qt::Key_Alt:
alt_key = KEY_STATE_Press;
break;
case Qt::Key_Control:
ctrl_key = KEY_STATE_Press;
break;
case Qt::Key_Shift:
shift_key = KEY_STATE_Press;
break;
}
if((alt_key == KEY_STATE_Press && ctrl_key == KEY_STATE_Press) || shift_key == KEY_STATE_Press)
{
QList<QTableWidgetItem*> items1 = ui->tableWidget->selectedItems();
if(!items1.isEmpty())
{
int count = items1.count();//获取该行的成员数
int row = ui->tableWidget->row(items1.at(0));// 获取该行的行号
for ( int i=0; i!=tabrow_nuamber.size(); ++i )
{
if ( tabrow_nuamber.at(i) == row )
{
tabrow_nuamber.removeAt(i);
for(int t =0;t<count;t++)
{
QTableWidgetItem *item = items1.at(t); //该行列的item
if(t == 1)
{
item->setText(" ");
}
item->setBackgroundColor(QColor(255,255,255));
}
return ;
}
}
tabrow_nuamber.append(row);
for(int i =0;i<count;i++)
{
QTableWidgetItem *item = items1.at(i); //该行列的item
item->setBackgroundColor(QColor(100,100,100));
if(i == 1)
{
item->setText("*");
}
}
return ;
}
}
}
//按键松开
void record::keyReleaseEvent(QKeyEvent *event)
{
switch(event->key())
{
case Qt::Key_Alt:
alt_key = KEY_STATE_Release;
break;
case Qt::Key_Control:
ctrl_key = KEY_STATE_Release;
break;
case Qt::Key_Shift:
shift_key = KEY_STATE_Release;
break;
}
}
但是这引入了一个问题,那就是当前界面想要使用按键捕获,就需要在切换到该界面时调用:
grabKeyboard()
那么在这个例子中就是调用my_record->grabKeyboard();
到达获取键盘的按键捕获
但是如果这个界面获取键盘捕获没有释放会导致其他界面不能正常获取键盘,不能输入
所以在切换至其他界面时需要调用my_record->releaseKeyboard();
释放键盘捕获文章来源:https://www.toymoban.com/news/detail-529294.html
但是使用grabKeyboard() 发现如果界面切换比较多,会导致有的界面不能正常通过键盘输入
所以最好的办法就是将keyReleaseEvent和keyPressEvent在主界面定义,然后发出信号在子界面进行处理文章来源地址https://www.toymoban.com/news/detail-529294.html
到了这里,关于Qt获取键盘按键ctrl和alt以及shift按键按下和松开的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!