鼠标事件(鼠标的各种处理事件)

xiaoxiao2021-02-28  22

QMouseEvent 类用来表示一个鼠标事件,在窗口部件中按下鼠标或者移动鼠标指针时,都会产生鼠标事件。利用 QMouseEvent 类可以获知鼠标是那个按键按下了,鼠标指针的当前位置等信息。通常重定义部件的鼠标事件处理函数来进行一些自定义的操作。 QWheelEvent 类用来表示滚轮事件,主要是用来获取滚轮移动的方向和距离。 示例代码: #ifndef WIDGET_H #define WIDGET_H #include <QWidget> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private: Ui::Widget *ui; QPoint offset; // 用来储存鼠标指针位置与窗口位置的差值 protected: void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void mouseDoubleClickEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void wheelEvent(QWheelEvent *event); }; #endif // WIDGET_H .cpp #include "widget.h" #include "ui_widget.h" #include <QMouseEvent> Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); QCursor cursor; // 创建光标对象 cursor.setShape(Qt::OpenHandCursor); // 设置光标形状 setCursor(cursor); // 使用光标 } Widget::~Widget() { delete ui; } 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("../mymouseevent/logo.png")); QApplication::setOverrideCursor(cursor);// 使用自定义的图片作为鼠标指针 } } void Widget::mouseMoveEvent(QMouseEvent *event) // 鼠标移动事件 { if(event->buttons() & Qt::LeftButton){ // 这里必须使用buttons() QPoint temp; temp = event->globalPos() - offset; move(temp);// 使用鼠标指针当前的位置减去差值,就得到了窗口应该移动的位置 } } 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); // 将窗口设置为全屏 else setWindowState(Qt::WindowNoState); // 否则恢复以前的大小 } } void Widget::wheelEvent(QWheelEvent *event) // 滚轮事件 { if(event->delta() > 0){ // 当滚轮远离使用者时 ui->textEdit->zoomIn(); // 进行放大 }else{ // 当滚轮向使用者方向旋转时 ui->textEdit->zoomOut(); // 进行缩小 } }
转载请注明原文地址: https://www.6miu.com/read-1650039.html

最新回复(0)