Qt中特殊Tab键事件的实现
2011-02-09 17:33
381 查看
在Qt中,可以使用 void
QWidget::keyPressEvent ( QKeyEvent
*
k )来进行键盘响应,例如:
void Form1::keyPressEvent( QKeyEvent *k )
{
if(k->key() == Key_A)
{
this->focusNextPrevChild(FALSE);//按A时焦点切换至上一部件
}
else
if(k->key() == Key_D)
{
this->focusNextPrevChild(TRUE);//按D时焦点切换至下一部件
}
else
if(k->key() == Key_W)
{
if(k->state() == Qt::ShiftButton)
{
this->resize(100,100);//当按下Shift+W时改变窗口大小
}
}
}
但是,有一些特殊的按键比如说Tab键,如果在keyPressEvent中实现则是不能成功的,因为默认Tab事件(切换焦点)被先捕获了,默认Tab和Shift+Tab事件定义在qwidget.h中,代码为:
case QEvent::KeyPress: {
QKeyEvent *k
= (QKeyEvent *)e;
bool res =
FALSE;
if (
k->key() == Key_Backtab ||
(k->key() == Key_Tab &&
(k->state() & ShiftButton)) ) {
QFocusEvent::setReason( QFocusEvent::Tab );
res =
focusNextPrevChild( FALSE );
QFocusEvent::resetReason();
} else if (
k->key() == Key_Tab ) {
QFocusEvent::setReason( QFocusEvent::Tab );
res =
focusNextPrevChild( TRUE );
QFocusEvent::resetReason();
}
}
所以我们要在之前就实现我们自己的Tab事件.实现代码如下:
QWidget::keyPressEvent ( QKeyEvent
*
k )来进行键盘响应,例如:
void Form1::keyPressEvent( QKeyEvent *k )
{
if(k->key() == Key_A)
{
this->focusNextPrevChild(FALSE);//按A时焦点切换至上一部件
}
else
if(k->key() == Key_D)
{
this->focusNextPrevChild(TRUE);//按D时焦点切换至下一部件
}
else
if(k->key() == Key_W)
{
if(k->state() == Qt::ShiftButton)
{
this->resize(100,100);//当按下Shift+W时改变窗口大小
}
}
}
但是,有一些特殊的按键比如说Tab键,如果在keyPressEvent中实现则是不能成功的,因为默认Tab事件(切换焦点)被先捕获了,默认Tab和Shift+Tab事件定义在qwidget.h中,代码为:
case QEvent::KeyPress: {
QKeyEvent *k
= (QKeyEvent *)e;
bool res =
FALSE;
if (
k->key() == Key_Backtab ||
(k->key() == Key_Tab &&
(k->state() & ShiftButton)) ) {
QFocusEvent::setReason( QFocusEvent::Tab );
res =
focusNextPrevChild( FALSE );
QFocusEvent::resetReason();
} else if (
k->key() == Key_Tab ) {
QFocusEvent::setReason( QFocusEvent::Tab );
res =
focusNextPrevChild( TRUE );
QFocusEvent::resetReason();
}
}
所以我们要在之前就实现我们自己的Tab事件.实现代码如下:
bool MyWidget::event(QEvent *event) { if (event->type() == QEvent::KeyPress) { QKeyEvent *ke = static_cast<QKeyEvent *>(event); if (ke->key() == Qt::Key_Tab) { // special tab handling here return true; } } else if (event->type() == MyCustomEventType) { MyCustomEvent *myEvent = static_cast<MyCustomEvent *>(event); // custom event handling here return true; } return QWidget::event(event); }
相关文章推荐
- Qt中特殊Tab键事件的实现
- Qt中特殊Tab键事件的实现
- Qt之Tab键实现(自由切换焦点)—— 采用事件过滤器处理
- Qt自定义事件的实现
- python3+PyQt5 重新实现QT事件处理程序
- Qt自定义事件的实现
- Qt学习笔记(1)---QT5利用事件过滤器实现在控件上绘图
- Qt实现窗口tabwidget的拖出双击弹回功能
- 选项卡(Tab)切换效果与关联事件处理实现
- c#添加事件,以xtraTabPage控件添加MouseWheel事件为例,实现图像的放大缩小
- Qt实现小功能之列表无限加载(创意很不错:监听滚动条事件,到底部的时候再new QListWidgetItem)
- Qt中解决 QLabel 点击事件通过qss+focuspolicy方法实现
- Qt自定义事件的实现
- Qt的事件模型(5种使用办法,通常重新实现event handler即可。只有定义控件才需要管理信号的发射)
- Qt实现小功能之列表无限加载(创意很不错:监听滚动条事件,到底部的时候再new QListWidgetItem)
- Qt自己定义事件实现及子线程向主线程传送事件消息
- React组件内事件传参实现tab切换的示例代码
- Qt(四)--- 事件处理机制以及QLabel的交互实现
- Qt 学习(8)Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针(转)