处理控件上的鼠标事件,是做界面人机交互经常需要的,本文做一个使用的总结。本文在QLable控件中实验过。
一、在h文件中声明鼠标响应事件处理函数
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
//函数功能:鼠标事件过滤
bool eventFilter(QObject *watched, QEvent *event);
二、cpp中给控件添加鼠标事件监听
//给用于显示的QLabel控件注册鼠标监听事件
ui->Camera1show->installEventFilter(this);
ui->Camera2show->installEventFilter(this);
ui->Camera3show->installEventFilter(this);
ui->Camera4show->installEventFilter(this);
ui->Camera5show->installEventFilter(this);
ui->Camera6show->installEventFilter(this);
ui->Camera7show->installEventFilter(this);
ui->Camera8show->installEventFilter(this);
ui->Camera9show->installEventFilter(this);
三、cpp中的鼠标响应事件处理函数
//函数功能:鼠标响应事件
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
//鼠标按下事件
if(event->type() == QEvent::MouseButtonPress){
QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
if(mouseEvent->button() == Qt::LeftButton){
//获得相对于控件的坐标
QPoint pos = QCursor::pos();
MoveStartPoint= ShowWindows[FlagShowCount-1]->mapFromGlobal(pos);
}
}
//鼠标移动事件
else if(event->type() == QEvent::MouseMove){
//获得相对于控件的坐标
QPoint pos = QCursor::pos();
MoveStartPoint= ShowWindows[FlagShowCount-1]->mapFromGlobal(pos);
}
//鼠标释放事件
else if(event->type() == QEvent::MouseButtonRelease){
//移动图片结束
}
//鼠标双击事件
if((event->type() == QEvent::MouseButtonDblClick)) //首先判断当前发生事件的对象
{
}
//鼠标滚轮滚动事件
else if((event->type() == QEvent::Wheel)) //首先判断当前发生事件的对象
{
QWheelEvent* wheelEvent = static_cast<QWheelEvent*>(event);
if(wheelEvent->delta()>0){
//图像放大倍数
ZoomValue += 0.2;
if(ZoomValue>3)
{
ZoomValue = 3;
}
update();
// qDebug()<<"up";
}else{
ZoomValue -= 0.2;
if (ZoomValue <= 0.1)
{
ZoomValue = 0.1;
}
update();
// qDebug()<<"down";
}
}
//我们处理了点击事件,把事件返回到上层,让它们继续处理其他事件
return QWidget::eventFilter(watched, event);
}
版权声明:本文为kissgoodbye2012原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。