Qt给控件添加鼠标事件

  • Post author:
  • Post category:其他


处理控件上的鼠标事件,是做界面人机交互经常需要的,本文做一个使用的总结。本文在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 版权协议,转载请附上原文出处链接和本声明。