- [Descrição]: Vídeo de referência https://www.bilibili.com/video/BV1g4411H78N?from=search&seid=6291131983490103239
Eventos comuns de mouse
Método para perceber
- Etapa 1, arraste um controle TextLab
- Como esses eventos de mouse são funções virtuais e protegidos, eles precisam ser reescritos.
- Mas o código-fonte QLabel não pode ser definido neste momento, podemos herdar QLabel e então reescrevê-lo .
- Etapa 2, clique com o botão direito do mouse no projeto para adicionar a classe C ++
- Etapa 3, modifique o arquivo correspondente a MyLabel (queremos reescrever QLabel, mas sem esta herança de opção, apenas QWidget pode ser herdado)
- Etapa 4, copie o nome de MyLabel, abra o arquivo ui criado na etapa 1, selecione o controle TextLab e clique com o botão direito para promovê-lo para
- Etapa 5. No arquivo de cabeçalho MyLabel, declare para reescrever o evento do mouse
//鼠标进入事件 void enterEvent(QEvent *); //鼠标离开事件 void leaveEvent(QEvent *); //鼠标按下事件 void mousePressEvent(QMouseEvent *ev); //鼠标释放事件 void mouseReleaseEvent(QMouseEvent *ev); //鼠标移动事件 void mouseMoveEvent(QMouseEvent *ev);
- No arquivo de origem MyLabel
//鼠标进入事件 void MyLabel::enterEvent(QEvent *) { qDebug() << "鼠标进入了"; } //鼠标离开事件 void MyLabel::leaveEvent(QEvent *) { qDebug() << "鼠标离开了"; } //鼠标按下事件 void MyLabel::mousePressEvent(QMouseEvent *ev) { //鼠标左键按下 打印信息 if(ev->button() == Qt::LeftButton) { QString str = QString("鼠标按下了 x = %1 y = %2 " ).arg(ev->x()).arg(ev->y()); qDebug() << str; } } //鼠标释放事件 void MyLabel::mouseReleaseEvent(QMouseEvent *ev) { if(ev->button() == Qt::LeftButton) { QString str = QString("鼠标释放了 x = %1 y = %2 " ).arg(ev->x()).arg(ev->y()); qDebug() << str; } } //鼠标移动事件 void MyLabel::mouseMoveEvent(QMouseEvent *ev) { if(ev->buttons() & Qt::LeftButton) { QString str = QString("鼠标移动了 x = %1 y = %2 " ).arg(ev->x()).arg(ev->y()); qDebug() <<str; } }