在树莓派下面运行了一下我的写的代码,发现在输入框中并不能使用键盘输入内容,什么都不能输入,只能自己实现软键盘。
QT 的事件处理:
- Qt 程序需要在main()函数创建一个QCoreApplication对象
- 然后调用它的exec()函数。这个函数就是开始 Qt 的事件循环。
- 在执行exec()函数之后,程序将进入事件循环来监听应用程序的事件。
- 当事件发生时:
- Qt 将创建一个事件对象。Qt 中所有事件类都继承于QEvent
- 在事件对象创建完毕后,Qt 将这个事件对象传递给QObject的event()函数。event()函数并不直接处理事件,而是将这些事件对象按照它们不同的类型,分发给不同的事件处理器(event handler)。
如上所述,event()函数主要用于事件的分发。所以,如果你希望在事件分发之前做一些操作,就可以重写这个event()函数了。
-
鼠标事件
使用的时候,加头文件:#include <QMouseEvent>
void mousePressEvent(QMouseEvent *event); //单击
void mouseReleaseEvent(QMouseEvent *event); //释放
void mouseDoubleClickEvent(QMouseEvent *event); //双击
void mouseMoveEvent(QMouseEvent *event); //移动
void wheelEvent(QWheelEvent *event); //滑轮
// 鼠标按下事件
void Widget::mousePressEvent(QMouseEvent *event)
{
// 如果是鼠标左键按下 改变指针形状,并且存储当前指针位置与窗口位置的差值。
if(event->button() == Qt::LeftButton){
···
}
// 如果是鼠标右键按下
else if(event->button() == Qt::RightButton){
···
}
}
// 鼠标移动事件 默认情况下,触发事件需要点击一下,才能触发。可设置为自动触发:setMouseTracking(true);
void Widget::mouseMoveEvent(QMouseEvent *event)
{
// 这里必须使用buttons()
if(event->buttons() & Qt::LeftButton){ //进行的按位与
···
}
}
// 鼠标释放事件
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
···
}
/