#include <QApplication> #include <QWidget> #include <QLabel> #include <QMouseEvent> class EventLabel : public QLabel { protected : void mouseMoveEvent(QMouseEvent *event ); void mousePressEvent(QMouseEvent *event ); void mouseReleaseEvent(QMouseEvent *event ); }; 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); } int main(int argc, char *argv[]) { QApplication app(argc, argv); EventLabel *label = new EventLabel; label->setWindowTitle("MouseEvent Demo" ); label->resize(300, 200); label->show(); return app.exec(); } 这里我们继承了QLabel类,重写了mousePressEvent、mouseMoveEvent和MouseReleaseEvent三 个函数。我们并没有添加什么功能,只是在鼠标按下(press)、鼠标移动(move)和鼠标释放(release)时把坐标显示在这个Label上面。 注意我们在mouseReleaseEvent函数里面有关QString的构造。我们没有使用arg参数的方式,而是使用C语言风格的sprintf来 构造QString对象,如果你对C语法很熟悉(估计很多C+++程序员都会比较熟悉的吧),那么就可以在Qt中试试熟悉的C格式化写法啦!
本 文出自 “豆子空间 ” 博客,请务必保留此出处http://devbean.blog.51cto.com/448512/223974