QT学习:鼠标事件

下面是鼠标事件例子的具体实现步骤。
(1)在头文件“mouseevent.h”中,重定义了QWidget类的三个鼠标事件方法,即mouseMoveEvent、 mousePressEvent和mouseReleaseEvent。当有鼠标事件发生时,就会响应相应的函数,其具体内容如下:

#include <QMainWindow> 
#include <QLabel> 
#include <QStatusBar> 
#include <QMouseEvent> 
class MouseEvent : public QMainWindow 
{ 
Q_OBJECT 
public: 
MouseEvent(QWidget *parent = 0); 
~MouseEvent(); 
protected: 
void mousePressEvent(QMouseEvent *e); 
void mouseMoveEvent(QMouseEvent *e); 
void mouseReleaseEvent(QMouseEvent *e); 
void mouseDoubleClickEvent(QMouseEvent *e); 
private: 
QLabel *statusLabel; 
QLabel *MousePosLabel; 
}; 

(2)源文件“mouseevent.cpp”的具体代码如下:

#include "mouseevent.h" 
MouseEvent::MouseEvent(QWidget *parent) 
: QMainWindow(parent) 
{ 
setWindowTitle(tr("鼠标事件")); 
//设置窗体的标题 
statusLabel = new QLabel; //创建QLabel控件statusLabel,用于显示鼠标移动时的实时位置。  
statusLabel->setText(tr("当前位置:")); 
statusLabel->setFixedWidth(100); 
MousePosLabel = new QLabel; //创建QLabel控件MousePosLabel,用于显示鼠标键按下或释放时的位置。 
MousePosLabel->setText(tr("")); 
MousePosLabel->setFixedWidth(100); 
statusBar()->addPermanentWidget(statusLabel); //在QMainWindow的状态栏中增加控件。  
statusBar()->addPermanentWidget(MousePosLabel); 
this->setMouseTracking(true); //设置窗体追踪鼠标。setMouseTracking()函数设置窗体是否追踪 鼠标,默认为false,不追踪, 
resize(400,200); 
} 

mousePressEvent()函数为鼠标按下事件响应函数,QMouseEvent类的button()方法可以获得发生鼠标事件的按键属性(左键、右键、中键等)。具体代码如下:

void MouseEvent::mousePressEvent(QMouseEvent *e) 
{ 
QString str="("+QString::number(e->x())+","+QString::number(e->y()) +")"; 
if(e->button()==Qt::LeftButton) 
{ 
statusBar()->showMessage(tr("左键:")+str); 
}
else if(e->button()==Qt::RightButton) 
{ 
statusBar()->showMessage(tr("右键:")+str); 
}
else if(e->button()==Qt::MidButton) 
{ 
statusBar()->showMessage(tr("中键:")+str); 
} 
} 

mouseMoveEvent()函数为鼠标移动事件响应函数,QMouseEvent类的x()和y()方法可以获得鼠标的
相对位置,即相对于应用程序的位置。具体代码如下:

void MouseEvent::mouseMoveEvent(QMouseEvent *e) 
{
MousePosLabel->setText("("+QString::number(e->x())+","+QString::number(e->y()) +")"); 
} 

mouseReleaseEvent()函数为鼠标松开事件响应函数,其具体代码如下:

void MouseEvent::mouseReleaseEvent(QMouseEvent *e) 
{ 
QString str="("+QString::number(e->x())+","+QString::number(e->y()) +")"; 
statusBar()->showMessage(tr("释放在:")+str,3000); 
} 

mouseDoubleClickEvent()函数为鼠标双击事件响应函数,此处没有实现具体功能,但仍要写出函数体框架:

void MouseEvent::mouseDoubleClickEvent(QMouseEvent *e){} 

(3)运行程序,效果如下图所示
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt 中,你可以使用 `QWheelEvent` 来捕获鼠标滚轮事件,并通过操作 `QTabWidget` 的滑动条来实现 `QTabWidget` 的滑动。下面是一个示例代码: ```cpp #include <QApplication> #include <QTabWidget> #include <QWheelEvent> class MyTabWidget : public QTabWidget { public: MyTabWidget(QWidget *parent = nullptr) : QTabWidget(parent) { } protected: void wheelEvent(QWheelEvent *event) override { if (event->modifiers() == Qt::ControlModifier) { // 捕获鼠标滚轮事件,并通过滑动条滑动来实现 QTabWidget 的滑动 QScrollBar *scrollBar = verticalScrollBar(); int delta = event->angleDelta().y() / 120; scrollBar->setValue(scrollBar->value() - delta); } else { // 默认处理鼠标滚轮事件 QTabWidget::wheelEvent(event); } } }; int main(int argc, char *argv[]) { QApplication a(argc, argv); MyTabWidget tabWidget; tabWidget.addTab(new QWidget, "Tab 1"); tabWidget.addTab(new QWidget, "Tab 2"); tabWidget.addTab(new QWidget, "Tab 3"); tabWidget.show(); return a.exec(); } ``` 在上面的示例中,我们创建了一个自定义的 `MyTabWidget` 类,继承自 `QTabWidget`。在 `MyTabWidget` 类中,我们重写了 `wheelEvent` 函数来捕获鼠标滚轮事件。 如果鼠标滚轮事件的修饰键是 `Qt::ControlModifier`,则我们获取滚轮事件的滚动角度,将其除以 120 得到滚动的步数。然后,我们通过操作 `QTabWidget` 的垂直滑动条来实现 `QTabWidget` 的滑动。 如果鼠标滚轮事件的修饰键不是 `Qt::ControlModifier`,则我们调用父类的 `wheelEvent` 函数来默认处理鼠标滚轮事件。 在 `main` 函数中,我们创建了自定义的 `MyTabWidget` 对象 `tabWidget`,并添加了几个选项卡。然后,我们显示 `tabWidget` 对象。 运行代码后,你可以尝试使用鼠标滚轮来滑动 `QTabWidget` 的滑动条,以实现 `QTabWidget` 的滑动效果。需要注意的是,你需要按住 Ctrl 键并使用鼠标滚轮来触发自定义的滑动逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值