QT鼠標事件的總結

參考教材實例,增加了註釋和新功能,方便大家交流學習

//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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章