Qt 学习之路 2(18):事件 在看这个文章的时候完善了作者的代码: #ifndef EVENTLABEL_H #define EVENTLABEL_H #include <qmainwindow> #include <qlabel> class QMouseEvent; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = 0); ~MainWindow(); }; class EventLabel : public QLabel { public: EventLabel(QWidget *parent = 0); ~EventLabel(); protected: void mouseMoveEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); }; #endif // EVENTLABEL_H #include "eventlabel.h" #include <qmouseevent> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { } MainWindow::~MainWindow() { } 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); } EventLabel::EventLabel(QWidget *parent) : QLabel(parent) { } EventLabel::~EventLabel() { } #include "eventlabel.h" #include <qapplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.resize(400,300); w.setWindowTitle("MouseEvent Demo"); EventLabel label(&w); //label.setMouseTracking(true); label.resize(300, 200); w.show(); return a.exec(); } </qapplication></qmouseevent></qlabel></qmainwindow>