1 事件分类
1.1 基础事件 (QEvent):
QEvent 是所有事件类的基类。它包含了一些基础的事件类型,如 MouseButtonPress、KeyPress、KeyRelease 等。
1.2 鼠标事件 (QMouseEvent):
QMouseEvent 处理与鼠标有关的事件,例如按下、释放、移动等。
1.3 键盘事件 (QKeyEvent):
QKeyEvent 处理与键盘有关的事件,例如按键按下、释放等。
1.4 焦点事件 (QFocusEvent):
QFocusEvent 处理与控件焦点有关的事件,例如获得焦点、失去焦点等。
1.5 绘图事件 (QPaintEvent):
QPaintEvent 处理绘图事件,例如窗口需要重新绘制时触发。
1.6 定时器事件 (QTimerEvent):
QTimerEvent 处理定时器事件,用于定时执行任务。
1.7 关闭事件 (QCloseEvent):
QCloseEvent 处理窗口关闭事件,例如用户点击关闭按钮时触发。
1.8 输入法事件 (QInputMethodEvent):
QInputMethodEvent 处理与输入法有关的事件,例如输入法的文本输入。
1.9 拖放事件 (QDragEnterEvent, QDragMoveEvent, QDropEvent):
用于处理拖放操作的事件,包括拖动物体进入、移动、释放等。
1.10 状态改变事件 (QWindowStateChangeEvent):
QWindowStateChangeEvent 处理窗口状态改变事件,例如最大化、最小化等。
1.11 自定义事件 (QEvent):
可以通过继承 QEvent 来创建自定义事件,以满足特定需求。
这只是其中的一些常见事件类型,Qt 中还有许多其他事件类型,每种都用于处理特定的用户输入或系统事件。在使用 Qt 进行应用程序开发时,你通常会使用这些事件来响应用户操作、更新界面等。
2 附录
2.1 closeEvent()函数
处理窗口关闭事件
在 Qt 中,closeEvent
是一个用于处理窗口关闭事件的事件处理函数。它是 QWidget
类的一个虚拟函数,你可以在你的窗口类中重新实现它以处理窗口关闭时的特定行为。
以下是一个简单的例子,展示了如何使用 closeEvent
处理窗口关闭事件:
#include <QCloseEvent>
#include <QWidget>
#include <QMessageBox>
class MyWidget : public QWidget {
Q_OBJECT
protected:
void closeEvent(QCloseEvent *event) override {
// 在窗口关闭事件中执行自定义操作
QMessageBox::StandardButton resBtn = QMessageBox::question(
this,
"My Widget",
tr("Do you really want to close this application?"),
QMessageBox::Cancel | QMessageBox::No | QMessageBox::Yes,
QMessageBox::Yes
);
if (resBtn != QMessageBox::Yes) {
// 忽略关闭事件
event->ignore();
} else {
// 处理关闭事件
event->accept();
}
}
};
在这个例子中,MyWidget
类继承自 QWidget
,并重写了 closeEvent
函数。在 closeEvent
中,我们弹出了一个询问框,询问用户是否真的要关闭应用程序。根据用户的选择,我们可以选择忽略关闭事件 (event->ignore()
) 或者接受关闭事件 (event->accept()
)。在实际的应用中,可以根据需要在 closeEvent
中执行各种自定义操作,例如保存设置、询问用户等。
closeEvent
是一个虚函数,它在 QWidget
类中被声明为虚函数,所以你不是必须要实现它。如果你不在你的窗口类中重新实现 closeEvent
,基类的默认实现会被调用。这个默认实现会简单地接受关闭事件,关闭窗口。
因此,你不一定要提供自己的 closeEvent
,但是如果你想要在窗口关闭时执行一些特定的操作,例如询问用户是否保存数据或执行一些清理工作,那么你可以重新实现这个函数。如果没有提供自己的 closeEvent
,通常情况下不会导致错误。只有在你需要在窗口关闭时执行特定操作时,你才需要重新实现这个函数。否则,Qt 会使用默认的行为关闭窗口。