zoukankan      html  css  js  c++  java
  • 鼠标事件 滚轮事件

    实现的效果:

    按下鼠标左键来拖动窗口;双击鼠标左键全屏窗口;按鼠标右键则使指针变为自定义的图片;使用滚轮可以放大或者缩编辑器里面的文本大小。

    注意:默认是当按下鼠标按键时移动鼠标,鼠标移动事件才会产生;如果不想按下鼠标,也可以获取鼠标移动事件,那么就在构造函数中添加:  setMouseTracking(true);//设置鼠标跟踪

    //widget.h
    protected:
        void mousePressEvent(QMouseEvent *event);
        void mouseReleaseEvent(QMouseEvent * event);
        void mouseDoubleClickEvent(QMouseEvent *event);
        void mouseMoveEvent(QMouseEvent * event);
        void wheelEvent(QWheelEvent *event);
    private: QPoint offset;//用来存储鼠标指针位置与窗口位置的差值
    //widget.cpp
    
    //...构造函数
        QCursor cursor;   //创建光标
        cursor.setShape(Qt::OpenHandCursor);//设置光标形状
        setCursor(cursor); //使用光标
       setMouseTracking(true); //测试无效果
    //... 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(":main/mouseShape.jpg")); QApplication::setOverrideCursor(cursor); } } void Widget::mouseReleaseEvent(QMouseEvent *event) //鼠标释放事件 { Q_UNUSED(event); QApplication::restoreOverrideCursor(); } void Widget::mouseDoubleClickEvent(QMouseEvent *event) //鼠标双击事件 { if(event->button() == Qt::LeftButton) { if(windowState() != Qt::WindowFullScreen)//如果窗口现在不是全屏 { setWindowState(Qt::WindowFullScreen);//设置为全屏 //setWindowState(Qt::WindowNoState);//否则回复以前的大小 测试效果 } else setWindowState(Qt::WindowNoState);//否则回复以前的大小 } } void Widget::mouseMoveEvent(QMouseEvent *event) //鼠标移动事件 { if(event->buttons() & Qt::LeftButton){ //这里必须是buttons QPoint temp; temp = event->globalPos() - offset; move(temp); //使用鼠标指针当前的位置减去差值,就得到了窗口应该移动的位置 //move(0,0); 测试使用 } } void Widget::wheelEvent(QWheelEvent *event) //滚轮事件 { if(event->delta()>0) //滚轮原理使用者 { ui->textEdit->zoomIn(); //进行放大 } else ui->textEdit->zoomOut(); //进行缩小 }
  • 相关阅读:
    mysql之alter 字段的修改、添加、删除
    mysql之Percona-XtraDB-Cluster prohibits without an explicit primary key with pxc_strict_mode = ENFORCING or MASTER报错
    mysql之常用操作,创建库、表,删除库、表
    Spring Boot的消息之旅(一)
    Spring Boot的日志之旅(一)
    Spring Boot的缓存之旅(二)
    Spring Boot的缓存之旅(一)
    使用Druid数据库连接池
    Spring Boot的数据库之旅(二)
    Spring Boot的安全之旅(一)
  • 原文地址:https://www.cnblogs.com/azbane/p/8668682.html
Copyright © 2011-2022 走看看