QT鼠标事件总结(二)示例

来源:互联网 发布:魔兽美工软件下载 编辑:程序博客网 时间:2024/05/16 06:18

 

 QT鼠标事件总结(全)

from http://blog.csdn.net/whealker/archive/2011/01/17/6146109.aspx

by whealker

参考教材实例,增加了注释和新功能,方便大家交流学习

//mouseevent.cpp

#include "mouseevent.h"
MouseEvent::MouseEvent( )
    : QMainWindow()
{  
    setWindowTitle(tr("Get Mouse Event"));
    setCursor(Qt::CrossCursor);//设置鼠标为十字星
    labelStatus = new QLabel();
    labelStatus->setMinimumSize(500,20);
    labelStatus->setFrameShape(QFrame::WinPanel);//设置标签形状
    labelStatus->setFrameShadow(QFrame::Sunken); //设置标签阴影;
    labelStatus->setText(tr("Mouse Position:"));   
    labelStatus -> setFixedWidth (100);
    labelMousePos = new QLabel();
    labelMousePos->setText(tr(""));   
    labelMousePos -> setFixedWidth (100);
    
    statusBar()->addPermanentWidget(labelStatus);//给状态栏添加永久的部件
    statusBar()->addPermanentWidget(labelMousePos);
    this->setMouseTracking ( true);//自动跟踪鼠标(默认情况下,mouseMoveEvent响应你按下鼠标的某个键的鼠标移动。)
}
MouseEvent::~MouseEvent()
{
}
void MouseEvent::mouseMoveEvent ( QMouseEvent * e )//鼠标移动事件响应
{
    //1.获取局部鼠标位置
    labelMousePos ->setText("("+QString::number(e->x())+","+QString::number(e->y())+")");
    //2.获取全局鼠标位置
    /*
    QPoint coursePoint;
    coursePoint = QCursor::pos();//获取当前光标的位置
    labelMousePos ->setText("("+QString::number(coursePoint.x())+","+QString::number(coursePoint.y())+")");
    */
}
void MouseEvent::mousePressEvent ( QMouseEvent * e )//鼠标单击事件响应
{
    QString str="("+QString::number(e->x())+","+QString::number(e->y())+")";
    if(e->button()==Qt::LeftButton)
    {
        statusBar()->showMessage (tr("Mouse Left Button Pressed:")+str);//显示临时信息
    }
    else if(e->button()==Qt::RightButton)
    {
        statusBar()->showMessage (tr("Mouse Right Button Pressed:")+str);
    }    
    else if(e->button()==Qt::MidButton)
    {
        statusBar()->showMessage (tr("Mouse Middle Button Pressed:")+str);
    }    
}
void MouseEvent::mouseDoubleClickEvent( QMouseEvent * e )//鼠标双击事件响应
{
    QString str="("+QString::number(e->x())+","+QString::number(e->y())+")";
    if(e->button()==Qt::LeftButton)
    {
        statusBar()->showMessage (tr("Mouse Left Button Double Clicked:")+str);
    }
    else if(e->button()==Qt::RightButton)
    {
        statusBar()->showMessage (tr("Mouse Right Button Double Clicked:")+str);
    }    
    else if(e->button()==Qt::MidButton)
    {
        statusBar()->showMessage (tr("Mouse Middle Button Double Clicked:")+str);
    }       
}
void MouseEvent::mouseReleaseEvent ( QMouseEvent * e )//鼠标松开事件响应
{
    QString str="("+QString::number(e->x())+","+QString::number(e->y())+")";
    statusBar()->showMessage (tr("Mouser Released:")+str,3000);
}
/*
    statusBar()状态栏
    状态栏位于主窗口的最下方,提供一个显示工具提示等信息的地方。
    一般地,当窗口不是最大化的时候,状态栏的右下角会有一个可以调节大小的控制点;
    当窗口最大化的时候,这个控制点会自动消失。Qt提供了一个QStatusBar类来实现状态栏。
    QMainWindow类里面就有一个statusBar()函数,用于实现状态栏的调用。
    类似menuBar()函数,如果不存在状态栏,该函数会自动创建一个,如果已经创建则会返回这个状态栏的指针。
    如果你要替换掉已经存在的状态栏,需要使用QMainWindow的setStatusBar()函数。
    状态栏显示的信息有三种类型:临时信息、一般信息和永久信息。
    其中,临时信息指临时显示的信息,一段时间后自动消失——这个功能可以使用QStatusBar的showMessage()函数来实现;
    一般信息可以用来显示页码之类的;
    永久信息是不会消失的信息,比如可以在状态栏提示用户Caps Lock键被按下之类。
*/
 
--------------------------------------------------------------------------
//mouseevent.h
#ifndef MOUSEEVENT_H
#define MOUSEEVENT_H
#include <QtGui>
class MouseEvent : public QMainWindow
{
    Q_OBJECT
public:
    MouseEvent();
    ~MouseEvent();
private:    
    QLabel *labelStatus; 
    QLabel *labelMousePos;
protected :
    void mouseMoveEvent ( QMouseEvent * e );
    void mousePressEvent ( QMouseEvent * e );
    void mouseReleaseEvent ( QMouseEvent * e );
    void mouseDoubleClickEvent( QMouseEvent * e );
};
#endif 
--------------------------------------------------------------------------
//main.cpp
#include <QtGui/QApplication>
#include "mouseevent.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MouseEvent w;
    w.show();
    return a.exec();
}
--------------------------------------------------------------------------
//mouseEbent.pro
QT       += core gui
TEMPLATE = app
SOURCES += main.cpp/
        mouseevent.cpp
HEADERS  += mouseevent.h

 

原创粉丝点击