Qt学习之路(7):事件初了解|重写鼠标点击事件

事件驱动是界面的一个基本机制.当然Qt为我们提供了另外一种选择,信号槽.总的来说,当我们使用Qt的组件(比如QPushButton)的时候,我们关心信号,因为这个时候信号由具体的组件发出,当我们自己定义组件的时候,我们就关心事件,因为我们需要通过重写事件的处理函数来设置我们自己定义的组件的功能.比如下面的代码就派生了一个QLabel的子类,显示鼠标移动,点击,抬起时候的坐标.

#ifndef EVENTLABEL
#define EVENTLABEL
#include "QLabel"

class EventLabel:public QLabel
{
    Q_OBJECT
    protected:
    /**********重写事件响应的虚函数****************/
    void mouseMoveEvent(QMouseEvent *event);
    void mousePressEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
};
#endif // EVENTLABEL
#include "eventlabel.h"
#include "QMouseEvent"


void EventLabel::mouseMoveEvent(QMouseEvent *event)
{
    this->setText(QString("<center><h1>Move: (%1, %2)</h1></center>") .arg
                  (QString::number(event->x()), QString::number(event->y())));
}
void EventLabel::mousePressEvent(QMouseEvent *event) {
    this->setText(QString("<center><h1>Press: (%1, %2)</h1></center>") .arg
                  (QString::number(event->x()), QString::number(event->y())));
}
void EventLabel::mouseReleaseEvent(QMouseEvent *event)
{
    QString msg;
    msg.sprintf("<center><h1>Release: (%d, %d)</h1></center>", event->x(), event->y());
    this->setText(msg);
}

===========================================

我们还可以将鼠标点击事件的处理写入主窗口.

void MainWindow:: mousePressEvent(QMouseEvent *event)
{
text->setText(QString("<center><h1> press(%1,%2) </h1></center>").arg
              (QString::number(event->x()),QString::number(event->y())));

}

Qt学习之路(7):事件初了解|重写鼠标点击事件_第1张图片

当然,由于文本编辑框,菜单等控件,鼠标在主窗口上的很多地方是无法点击到的.

你可能感兴趣的:(Qt学习之路(7):事件初了解|重写鼠标点击事件)