鼠标事件 在 Qt 中,⿏标事件是⽤ QMouseEvent 类来实现的。当在窗⼝中按下⿏标或者移动⿏标时,都会产⽣⿏标事件。 利⽤ QMouseEvent 类可以获取⿏标的哪个键被按下了以及⿏标的当前位置等信息。 在 Qt 帮助⽂档中查找 QMouseEvent 类如下图⽰: (1)鼠标单击事件 在 Qt 中,⿏标按下是通过虚函数 mousePressEvent() 来捕获的。 mouseReleaseEvent() 函数原型如下: [virtual protected] void QWidget::mouseReleaseEvent(QMouseEvent *event) mouseDoubleClickEvent() 函数原型如下: [virtual protected] void QWidget::mouseDoubleClickEvent(QMouseEvent
QWidgetdef get_time_str() -> str: return datetime.now().isoformat(sep = ' ')def gen_event_str(event: QMouseEvent v_layout) self.setCentralWidget(container) # 需要先按下鼠标按钮再移动才能触发 def mouseMoveEvent(self, event: QMouseEvent 如果想让事件继续传播,可以调用 event.ignore() """ event.accept() def mousePressEvent(self, event: QMouseEvent self.clicked_label.setText(gen_event_str(event)) event.accept() def mouseReleaseEvent(self, event: QMouseEvent
2、在dialog.h里面添加如下代码 引入头文件 #include <QDialog> #include <QPainter> #include <QPaintEvent> #include <QMouseEvent #include <QPointF> 函数声明 protected: void paintEvent(QPaintEvent *); void mouseReleaseEvent(QMouseEvent *); void mousePressEvent(QMouseEvent *); void mouseMoveEvent(QMouseEvent *); 私有变量 private: void Dialog::mouseMoveEvent(QMouseEvent *event){ if(event->buttons()&Qt::LeftButton) update();//进行绘制 } } //当鼠标释放时,也进行重新绘制 void Dialog::mouseReleaseEvent(QMouseEvent
); public slots: protected: void paintEvent(QPaintEvent *); //绘制 void mousePressEvent(QMouseEvent *e); //按下 void mouseMoveEvent(QMouseEvent *e); //移动 void mouseReleaseEvent(QMouseEvent *e); //松开 void mouseDoubleClickEvent(QMouseEvent *event); //双击 bool bDraw; / GRAPHICSPAINTER_H GraphicsPainter.cpp: #include "graphicspainter.h" #include <QPainter> #include <QMouseEvent //按下 void GraphicsPainter::mousePressEvent(QMouseEvent *e) { if(bDraw) { if(!
(QMouseEvent \*); // 鼠标移动消息,默认要在触发了mousePressEvent后才生效 // 需要在构造函数中调用 this->setAttribute(Qt::WA\_MouseTracking ); void mouseMoveEvent(QMouseEvent \*); // 鼠标进入窗口范围内消息 void enterEvent(QEvent \*); // 鼠标离开窗口范围内消息 void ) : QWidget(parent) { this->setAttribute(Qt::WA_MouseTracking); } void CWidget::mousePressEvent(QMouseEvent "; } } void CWidget::mouseReleaseEvent(QMouseEvent *ev) { // 鼠标左键单击弹起 if (ev->button() == Qt: { // 双击消息,会产生一次 mousePressEvent qDebug() << “doubleClick…”; } void CWidget::mouseMoveEvent(QMouseEvent
Widget(QWidget *parent = nullptr); ~Widget(); // 鼠标点击事件 void mousePressEvent(QMouseEvent Ui::Widget *ui; }; 2、在 “widget.cpp” ⽂件中实现 ⿏标点击事件 和 拦截事件; #include <QDebug> #include <QMouseEvent > void Widget::mousePressEvent(QMouseEvent *event) { if(event->button() == Qt::LeftButton * event = static_cast<QMouseEvent*>(e); QString str = QString("Event 函数中鼠标按下: x = %1, y = * event = static_cast<QMouseEvent*>(e); QString str = QString("事件过滤器中鼠标按下:x = %1, y =
隐藏后,会发现无法我们无法移动窗口了,想要移动窗口,我们需要进行鼠标事件重写,包括mousePressEvent(QMouseEvent *event),mouseMoveEvent(QMouseEvent *event),mouseReleaseEvent(QMouseEvent *event)。 首先在mainwindow.h中声明这三个函数: void mousePressEvent(QMouseEvent *event);//鼠标点击 void mouseMoveEvent( QMouseEvent *event);//鼠标移动 void mouseReleaseEvent(QMouseEvent *event);//鼠标释放 //添加类成员m_point(QPoint 类型) QPoint m_point; mianwindow.cpp中进行定义: void MainWindow::mousePressEvent(QMouseEvent *event) { if
painter.drawRect(QRect(sx,sy,ex-sx,ey-sy)); } painter.end(); } void screenview::mousePressEvent(QMouseEvent event->y(); startpoint=event->pos(); } update(); } void screenview::mouseMoveEvent(QMouseEvent ; ey=event->y(); endpoint=event->pos(); update(); } void screenview::mouseReleaseEvent(QMouseEvent ); ~screenview(); protected: void paintEvent(QPaintEvent *event); void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); protected slots: void mouseReleaseEvent(QMouseEvent
void mouseReleaseEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mousePressEvent (QMouseEvent *event); private: ......... ->setupUi(this); setWindowFlags(Qt::FramelessWindowHint); } void login_main::mousePressEvent(QMouseEvent (); isPressedWidget = true; // 当前鼠标按下的即是QWidget而非界面上布局的其它控件 } void login_main::mouseMoveEvent(QMouseEvent m_lastPos.y())); m_lastPos = event->globalPos(); } } void login_main::mouseReleaseEvent(QMouseEvent
self.setMask(self.pix) print(self.pix.size()) self.dragPosition = None # 重定义鼠标按下响应函数mousePressEvent(QMouseEvent )和鼠标移动响应函数mouseMoveEvent(QMouseEvent),使不规则窗体能响应鼠标事件,随意拖动。 Qt.OpenHandCursor)) if event.button() == Qt.RightButton: self.close() def mouseMoveEvent(self, QMouseEvent ): if Qt.LeftButton and self.m_drag: # 当左键移动窗体修改偏移值 self.move(QMouseEvent.globalPos () - self.m_DragPosition) QMouseEvent.accept() def mouseReleaseEvent(self, QMouseEvent):
事件处理 QT中,事件作为一个对象,继承自QEvent类,常见的有键盘事件QKeyEvent、鼠标事件QMouseEvent和定时器事件QTimerEvent等。 explicit MouseEvent(QWidget *parent = 0); ~MouseEvent(); protected: void mousePressEvent(QMouseEvent *event);//鼠标按下 void mouseMoveEvent(QMouseEvent *event);//鼠标移动 void mouseReleaseEvent(QMouseEvent * mouseEvent = (QMouseEvent*)event; if(mouseEvent->button() & Qt::LeftButton) * mouseEvent = (QMouseEvent*)event; if(mouseEvent->button() & Qt::LeftButton)
void mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { /* 捕获按下时坐标 m_startPoint = frameGeometry().topLeft() - event->globalPos(); } } void mouseMoveEvent(QMouseEvent 完整代码 #include <QWidget> #include <QVBoxLayout> #include <QPushButton> #include <QPainter> #include <QMouseEvent painter.fillRect(this->rect(), QColor(0, 0, 0, 0x20)); /* 设置透明颜色 */ } void mousePressEvent(QMouseEvent m_startPoint = frameGeometry().topLeft() - event->globalPos(); } } void mouseMoveEvent(QMouseEvent
*event); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event *event); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event *event); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event *event); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event ); QPoint z; protected: void mouseDoubleClickEvent(QMouseEvent *event); //鼠标双击事件 }; #endif
要包含头文件#include <QMouseEvent> 1.1效果 ? 2.代码 2.1.鼠标事件代码 在头文件中声明 protected: //mouse void mouseMoveEvent(QMouseEvent *event); //移动 void mousePressEvent(QMouseEvent *event); //单击 void mouseReleaseEvent(QMouseEvent *event); / /释放 void mouseDoubleClickEvent(QMouseEvent *event); //双击 void wheelEvent(QWheelEvent *event); //滑轮 在源文件中实现 void check_keyboard_mouse::mouseMoveEvent(QMouseEvent *event) {//移动 QPoint p_ab = event
QRect tempRt(m_startPT, m_endPT); p.drawRect(tempRt); } } void Widget::mousePressEvent(QMouseEvent >pos(); isPressedWidget = true; // 当前鼠标按下的即是QWidget而非界面上布局的其它控件 } void Widget::mouseMoveEvent(QMouseEvent { m_endPT = event->pos(); } this->update(); } void Widget::mouseReleaseEvent(QMouseEvent void mouseReleaseEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mousePressEvent (QMouseEvent *event); void paintEvent(QPaintEvent *p); private slots: void on_pushButton_clicked
event.accept() self.setCursor(QCursor(Qt.OpenHandCursor)) def mouseMoveEvent(self, QMouseEvent ): if Qt.LeftButton and self.m_drag: self.move(QMouseEvent.globalPos() - self.m_DragPosition ) QMouseEvent.accept() def mouseReleaseEvent(self, QMouseEvent): self.m_drag = False
PlayerSlider继承自QSlider,行为定义如下: #ifndef PLAYERSLIDER_H #define PLAYERSLIDER_H #include <QSlider> #include <QMouseEvent sigProgress(qint64); private: bool m_bPressed; protected: void mousePressEvent(QMouseEvent *); void mouseMoveEvent(QMouseEvent *); void mouseReleaseEvent(QMouseEvent *); QWidget * parent) : QSlider(parent) { m_bPressed = false; } void PlayerSlider::mousePressEvent(QMouseEvent *e) { QSlider::mouseMoveEvent(e);//必须有这句,否则手动不能移动滑块 } void PlayerSlider::mouseReleaseEvent(QMouseEvent
TestMouseEvent 在widget.cpp中添加代码 #include "widget.h" #include "ui_widget.h" #include <QEvent> #include<QMouseEvent QEvent *ev) { if ((ev->type() == QEvent::MouseButtonPress)&&(i%2==0)) { i++; QMouseEvent *me1 = static_cast<QMouseEvent*> (ev); 相对坐标 //qDebug() << "MouseButtonPress " << me1 = 0)) { i++; QMouseEvent *me2 = static_cast<QMouseEvent*> (ev); 相对坐标
*ev); virtual void mouseReleaseEvent(QMouseEvent *ev); // 鼠标的移动 virtual void mouseMoveEvent (QMouseEvent *ev);signals:};#endif // MYLABEL_Hcpp文件#include "mylabel.h"#include <QDebug>#include <QMouseEvent *ev){ qDebug() << "鼠标释放";}// 鼠标的移动void myLabel::mouseMoveEvent(QMouseEvent *ev){ if(ev->buttons * ev = static_cast<QMouseEvent *>(e); QString str = QString("鼠标按下了,x=%1,y=%2; global坐标为:x=%3, * ev = static_cast<QMouseEvent *>(e); QString str = QString("事件过滤器===鼠标按下了,x=%1,y=%2; global
示例 – 当鼠标点击时,获取对应的坐标值 该示例主要基于上面代码,实现:当鼠标点击时,获取对应的坐标值 void Label::mousePressEvent(QMouseEvent *event) { 利用 QMouseEvent 类可以获取鼠标的哪个键被按下了以及鼠标的当前位置等信息。 在 Qt 帮助文档中查找 QMouseEvent 类如下图示: 鼠标单击 | 释放 | 双击 | 移动 事件 ① 在 Qt 中,鼠标按下是通过虚函数 mousePressEvent() 来捕获的。 mousePressEvent() 函数原型如下: [ virtual protected] void QWidget:: mousePressEvent (QMouseEvent * event ) mouseReleaseEvent() 函数原型如下: [ virtual protected] void QWidget:: mouseReleaseEvent (QMouseEvent * event