void description(QString &);要在.cpp中定义吗?
///////////////////
#include <qwidget.h>
#include <qevent.h>
#include <qstring.h>
class MouseSensor: public QWidget
{
Q_OBJECT
public:
MouseSensor(QWidget *parent=0,const char *name=0);
private:
void emitDescription(const QString &,QMouseEvent *);
virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseReleaseEvent(QMouseEvent *event);
virtual void mouseDoubleClickEvent(QMouseEvent *event);
virtual void mouseMoveEvent(QMouseEvent *event);
signals:
void description(QString &);
};
#endif
/* mousesensor.cpp */
#include <qstring.h>
#include "mousesensor.h"
MouseSensor::MouseSensor(QWidget *parent)
: QWidget(parent)
{
setMinimumSize(300,300);
}
void MouseSensor::mousePressEvent(QMouseEvent *event)
{
emitDescription(QString("Press: "),event);
}
void MouseSensor::mouseReleaseEvent(QMouseEvent *event)
{
emitDescription(QString("Release: "),event);
}
void MouseSensor::mouseDoubleClickEvent(QMouseEvent *event)
{
emitDescription(QString("DoubleClick: "),event);
}
void MouseSensor::mouseMoveEvent(QMouseEvent *event)
{
emitDescription(QString("Move: "),event);
}
void MouseSensor::emitDescription(const QString &typeStr,
QMouseEvent *event)
{
QString btnStr(typeStr);
ButtonState state = event->state();
if(state & ControlButton)
btnStr+= "Ctl-";
if(state & AltButton)
btnStr+= "Alt-";
if(state & ShiftButton)
btnStr+= "Shft-";
if(state & LeftButton)
btnStr += "(Lft)-";
if(state & MidButton)
btnStr += "(Mid)-";
if(state & RightButton)
btnStr += "(Rgt)-";
ButtonState button = event->button();
if(button & LeftButton)
btnStr += "Lft";
if(button & MidButton)
btnStr += "Mid";
if(button & RightButton)
btnStr += "Rgt";
QString str = QString("%1 (%2,%3)(%4,%5)")
.arg(btnStr)
.arg(event->x()).arg(event->y())
.arg(event->globalX()).arg(event->globalY());
emit description(str);
}