QT::事件
鼠标事件(QMouseEvent)
键盘事件(QKeyEvent)
绘制事件(QPaintEvent)
窗口尺寸改变(QResizeEvent)
滚动事件(QScrollEvent)
控件显示(QShowEvent)
控件隐藏(QHideEvent)
定时器事件(QTimerEvent)
事件: QEvent 事件基类 QDropEvent:QDropMoveEvent、QDropEnterEvent //拖拽事件 QCloseEvent 关闭事件 QPaintEvent 绘制事件 QInputEvent:QContextMenuEvent、QKeyEvent、QMouseEvent、QWheelEvent... 鼠标/键盘类事件 QResizeEvent 重置大小
QScrollEvent 滚动事件
QShowEvent 控件显示 QTimerEvent 定时器事件 事件的五种处理方法 1、重新实现部件的paintEvent,mousePressEvent等,最常用的方法,只能处理特定部件的特定事件。 2、重新实现notify函数,功能函数强大,提供了完全的控制。可以在事件过滤器之前获取他们,但是,它只能处理一个事件。 3、像Application对象上安装事件过滤器,一个程序只有一个Application对象。所以这样实现的功能与notify函数相同。优点是可以同时处理多个事件。 4、重写Event()函数。QObject类的Event()函数可以在事件到达默认事件处理函数之前获得该事件。 5、在对象上安装过滤器,使用事件的过滤器可以在一个界面类中同时处理不同字部件的不同事件。 在实际编程中,最常用的是方法一、其次是方法五。
ui->setupUi(this); // 设置鼠标跟踪 setMouseTracking(true); // 创建光标对象 QCursor cursor; // 设置光标形状 cursor.setShape(Qt::OpenHandCursor); // 使用光标 setCursor(cursor);
鼠标按下事件 void Widget::mousePressEvent(QMouseEvent *event) { // 如果是鼠标左键按下 if(event->button() == Qt::LeftButton){ // 使鼠标指针暂时变为小手抓取的样子 QCursor cursor; cursor.setShape(Qt::ClosedHandCursor); //是鼠标改变形状 QApplication::setOverrideCursor(cursor); // 获取指针位置和窗口位置的差值,以便移动时使用 offset = event->globalPos() - pos(); } // 如果是鼠标右键按下 else if(event->button() == Qt::RightButton){ // 使用自定义的图片作为鼠标指针 QCursor cursor(QPixmap("../image/yafeilinux.png")); //使用自定义图片做为鼠标指针 QApplication::setOverrideCursor(cursor); } }
鼠标移动事件 void Widget::mouseMoveEvent(QMouseEvent *event) { // 这里必须使用buttons() if(event->buttons() &Qt::LeftButton) { // 我们使用鼠标指针当前的位置减去差值,就得到了窗口应该移动的位置 QPoint temp; temp = event->globalPos() - offset; move(temp); } }
鼠标双击事件 void Widget::mouseDoubleClickEvent(QMouseEvent *event) { // 如果是鼠标左键按下 if(event->button() == Qt::LeftButton){ // 如果现在不是全屏,将窗口设置为全屏 if(windowState() != Qt::WindowFullScreen) setWindowState(Qt::WindowFullScreen); // 如果现在已经是全屏状态,那么恢复以前的大小 else setWindowState(Qt::WindowNoState); } }
滚轮事件 void Widget::wheelEvent(QWheelEvent *event) { // 当滚轮远离使用者时进行放大,当滚轮向使用者方向旋转时进行缩小 if(event->delta() > 0) { ui->textEdit->zoomIn(); }else { ui->textEdit->zoomOut(); } }
键盘事件 void MainWindow::keyPressEvent(QKeyEvent *e) { if(e->modifiers() == Qt::ControlModifier) if(e->key() == Qt::Key_M) setWindowState(Qt::WindowMaximized); else QWidget::keyPressEvent(e); } void MainWindow::keyReleaseEvent(QKeyEvent *e) { setWindowState(Qt::WindowMinimized); }