//比如Tab键,默认会focus到下一个组件,
//重写event方法,然后在相应的按键那return false
//如果不行用return true
bool MyButton::event(QEvent *e){
if (e->type() == QEvent::KeyPress) {
QKeyEvent *ke = static_cast<QKeyEvent *>(e);
// QKeyEvent *ke = (QKeyEvent *)(e);
if (ke->key() == Qt::Key_Tab) {
return false;
}else
if(ke->key()==Qt::Key_Up){
return false;
}else if(ke->key()==Qt::Key_Down){
return false;
}
}
return QWidget::event(e);
}
//今天又发现了一个方法,不用重写基类的event,只要改每一个画面的eventFilter
//示例 屏蔽了button_signin 和textBox_name的各一个按键
bool MyWindow::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if (obj == button_signin) {
if(keyEvent->key() == Qt::Key_Down)
return true;
else return false;
}else if(obj == textBox_name){
if(keyEvent->key() == Qt::Key_Up)
return true;
else return false;
}else{
return false;
}
} else {
// standard event processing
return QObject::eventFilter(obj, event);
}
}
//再在MyWindow的构造函数中
textBox_name->installEventFilter(this);
button_signin->installEventFilter(this);
今天又总结了一下:
Keypressevent的运行原理:当一个key按下,从子Widget的keyPressEvent开始运行,如对应的key有这个event则响应event,响应完不再往后执行;如没有则检查父Widget的keyPressEvent,一层层往外。这让我想到了js的事件冒泡
在画面中按上下键不能聚焦button是因为button的上下键有对应的keyPressEvent,所以就不运行画面的keyPressEvent,同样的,输入框能聚焦因为它自己没有上下键的keyPressEvent,所以运行画面的keyPressEvent。
重写Button的event可以关闭具体键的keyPressEvent,一旦关闭系统认为没这个event自然就执行父Widget的event了。
EventFilter与上面不同,它是过滤了某些事件,使某个控件不执行某个事件, 但那个控件本身是有那个事件的, 所以用了eventfilter之后button还是有自己的keyPressEvent的,当然也不会执行画面的keyPressEvent。
结论:EventFilter的功能是控制是否执行某控件的某event,重写event方法是让控件本身有没有某个event。两者互不影响。
分享到:
相关推荐
【Qt Qwidget 屏幕键盘】是一个利用Qt框架开发的虚拟输入设备,它可以在屏幕上显示一个键盘布局,供用户在无物理键盘的环境下进行输入操作。这个屏幕键盘尤其适用于触摸屏设备或者某些特定的应用场景,比如自助服务...
首先,QT中的键盘事件主要有QEvent::KeyPress和QEvent::KeyRelease两种,分别对应于按键按下和按键释放。为了全局监听键盘事件,我们需要自定义一个事件过滤器类,继承自QObject,并重写其eventFilter()方法。事件...
在Qt编程中,有时我们需要为用户提供更直观的交互体验,比如在按钮上显示实时更新的进度条。这个任务可以通过重写`QWidget`类来实现,让按钮具备动态展示进度的功能。下面将详细介绍如何实现这一功能。 首先,我们...
在QT C++编程环境中,`QWidget`是所有用户界面组件的基础类,它是构建GUI应用程序的核心。本教程将探讨如何利用`QWidget`自定义一个带有独特头部设计和毛玻璃效果的窗口。毛玻璃效果,又称模糊效果,能为窗口提供半...
QT(Qwidget) + dicom QT(Qwidget) + dicom QT(Qwidget) + dicomQT(Qwidget) + dicom QT(Qwidget) + dicom QT(Qwidget) + dicom
QT_QWidget实现去除原边框,自定义边框(最大化、最小化、关闭按钮)、可拆分窗口部件(由用户使用时自由拖动部件尺寸)、拖动窗体和缩放(窗体四周都可以拉伸缩放)、样式表美化部件窗口、解决QMouseEvent触发事件...
Qt中使用QWidget重绘实现圆环形渐变色进度条,支持不确定进度模式,支持设置背景图片,另外组件的整体尺寸,圆环粗细,各部分颜色,字体都是可以随意调整的,还支持QWidget的QSS语句调整背景色,外边框等,灵活度很...
在QT中,我们可以利用其丰富的API来实现对鼠标和键盘事件的实时捕获和处理,这对于创建交互性强的应用程序至关重要。下面我们将深入探讨如何在QT中实现这一功能。 首先,我们关注的是“实时捕获鼠标事件”。在QT中...
在Qt框架中,结合QWidget和QML,我们可以实现丰富的用户界面和高效的系统集成。这篇教程将专注于如何在Qt中利用QWidget调用QML来打开安卓摄像头,并实现实时预览功能。这一过程涉及到Qt的多层技术,包括QML的动态...
在Qt中,通常我们可以通过继承`QWidget`类并重写其`mouseMoveEvent`、`mousePressEvent`、`mouseReleaseEvent`、`keyPressEvent`和`keyReleaseEvent`等方法来处理特定窗口内的鼠标和键盘事件。然而,当需要监听全局...
在Qt编程中,`QWidget`是所有用户界面(UI)元素的基础类,它代表了屏幕上的一个矩形区域。在创建一个Qt程序时,我们通常会继承`QWidget`或其子类,如`QMainWindow`、`QDialog`等,来构建我们的窗口或控件。本文将...
QT数字软键盘是一种在GUI应用中常见的用户输入方式,尤其适用于移动设备或触摸屏系统,因为它们可能没有物理键盘。这个例子是关于如何利用Qt框架创建一个简单的数字软键盘,并与QLineEdit组件协同工作,使得用户能够...
QT 编写的数字键盘是一种基于Qt库开发的用户界面组件,用于在应用程序中提供一个模拟数字输入设备的功能。Qt是一个跨平台的C++图形用户界面应用程序框架,它提供了丰富的API和工具,使得开发者可以轻松创建出美观且...
你需要确保系统正确配置了键盘驱动,使得按键事件能被系统识别并传递给QT应用程序。 `QT键盘驱动设定.doc`可能涉及到了如何设置QT应用程序的键盘驱动。在某些情况下,可能需要编写或修改内核驱动,以便能够正确处理...
在Qt5中,我们可以继承QAbstractItemView或者QWidget类,然后重写其paintEvent()方法来绘制键盘的布局和按键。键盘上的每个按键可以看作是一个小的QRect,我们可以用QPainter进行绘制,并添加鼠标点击事件来响应按键...
在Qt框架中,`QWidget`是构建用户界面的基本组件,它是所有GUI部件的基类。在Qt5.8版本中,我们经常会遇到需要保存和读取应用程序设置的情况,这时可以利用`QSettings`类来处理ini文件。`QSettings`是Qt提供的一种...
首先,要创建一个数字键盘界面,我们需要包含必要的Qt头文件,如`<QtWidgets>`,并继承自`QWidget`类。在构造函数中,我们可以初始化键盘的布局和按钮。利用`QGridLayout`可以方便地将按键按行和列排列。每个按钮...
每个按键可能是一个自定义的QWidget或QGraphicsItem子类,通过覆写其paintEvent()函数来绘制按键的外观,同时添加鼠标事件处理,如mousePressEvent()和mouseReleaseEvent(),来实现按键的按下和释放效果。...
在QT框架下开发Linux应用程序时,获取键盘和鼠标事件是常见的需求,这有助于实现用户交互和界面控制。本文将深入探讨如何在Linux环境下利用QT库来捕获和处理这些事件。 首先,QT是一个跨平台的应用程序开发框架,...
在Qt框架下,`QWidget`和`QML`是两种不同的UI表示技术。`QWidget`是C++中的组件,主要用于构建传统的图形用户界面,而`QML`是一种声明式语言,用于创建现代、动态和触控友好的用户界面。将`QWidget`嵌入到`QML`中...