实现的效果:
按下鼠标左键来拖动窗口;双击鼠标左键全屏窗口;按鼠标右键则使指针变为自定义的图片;使用滚轮可以放大或者缩编辑器里面的文本大小。
注意:默认是当按下鼠标按键时移动鼠标,鼠标移动事件才会产生;如果不想按下鼠标,也可以获取鼠标移动事件,那么就在构造函数中添加: 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(); //进行缩小 }