共计 1290 个字符,预计需要花费 4 分钟才能阅读完成。
首先来看第一种事件处理:”重新实现特定的事件处理器”,这种方式最简单,派生于一个组件,重新实现它的事件处理。这里我主要实现的是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上的文本随着鼠标在不同的位置点击、释放以及左击拖动鼠标的不同而显示相应的文本。界面如下:
正文完
请博主喝杯咖啡吧!