Qt事件處理(一)


  從這章開始,我將簡單實現Qt事件處理的五種方式,這五種方式的實現都是基於一個自定義的Button,我將它命名為MyButton。由於我是剛學Qt,有什么講的不對的地方,請指正,不勝感激。

  首先來看第一種事件處理:"重新實現特定的事件處理器",這種方式最簡單,派生於一個組件,重新實現它的事件處理。這里我主要實現的是mousePressEvent、mouseReleaseEvent以及mouseMoveEvent這三個事件處理,而實現的方式都差不多,不同在於設置Button顯示的文本。

  mybutton.h的頭文件如下:

#ifndef MYBUTTON_H
#define MYBUTTON_H

#include <QPushButton>
#include <QMouseEvent>

class MyButton : public QPushButton
{

protected:
    void mousePressEvent(QMouseEvent* event);
    void mouseReleaseEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
};

#endif

   mybutton.cpp的文件如下:

#include "mybutton.h"

void MyButton::mousePressEvent(QMouseEvent *event)
{
    this->setText(QString("Press: %1, %2").arg(QString::number(event->x()), QString::number(event->y())));
}

void MyButton::mouseReleaseEvent(QMouseEvent *event)
{
    this->setText(QString("Release: %1, %2").arg(QString::number(event->x()), QString::number(event->y())));
}

void MyButton::mouseMoveEvent(QMouseEvent *event)
{
    this->setText(QString("Move: %1, %2").arg(QString::number(event->x()), QString::number(event->y())));
}

  main函數調用為:

#include <QtGui/QApplication>
#include <QtCore/QTextCodec>
#include "mybutton.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
    MyButton *button = new MyButton;
    button->setWindowTitle(QObject::tr("重新實現特定的事件處理器"));
    button->resize(400, 200);
    button->show();
    
    return a.exec();
}

  程序運行時,Button上的文本隨着鼠標在不同的位置點擊、釋放以及左擊拖動鼠標的不同而顯示相應的文本。界面如下:

              

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM