#include
class myLabel : public QLabel
{
Q_OBJECT
public:
explicit myLabel(QWidget *parent = 0);
};
protected:
void mouseMoveEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
Y para enviar la posición del ratón a otros controles voy a crear una señal a propósito:
signals:
void mouseOver (QPoint point);
2. Insertar myLabel en la MainWindow:
#include "mylabel.h"
myLabel *ml = new (myLabel);
ml->setText("Pasa el ratón por aquí");
//ui->horizontalLayout->addWidget(ml);
ui->horizontalLayout->insertWidget(0,ml);
horizontalLayout tiene dos métodos para insertar los widget: addwidget (al final) y insertWidget (indicando el índice dentro el layout).
3. En el constructor de myLabel activar el mouse tracking:
myLabel::myLabel(QWidget *parent) :
QLabel(parent)
{
this->setText("Hola");
this->setMouseTracking(true);
this->setFrameShape(QFrame::Box);
}
4. Implementar los eventos del ratón.
void myLabel::mouseMoveEvent(QMouseEvent *event){
QPoint point;
point = event->pos();
QString txt;
txt = QString::number(point.x()) + "," + QString::number(point.y());
this->setText(txt);
// Se envia la señal con la posición del ratón
emit mouseOver(point);
}
void myLabel::mousePressEvent(QMouseEvent *event){
this->setText("Pulsado");
}
void myLabel::mouseReleaseEvent(QMouseEvent *event){
this->setText("Soltado");
}
4. En el mainWindow crear un slot para recivir los signals de myLabel:
en mainwindow.h
public slots:
void updateMousePos(QPoint);
y en mainwindow.cpp
void MainWindow::updateMousePos(QPoint p){
// Esto lo que hace es mostrar la posición del ratón
// en dos QLabel
this->ui->lx->setText (QString::number(p.x()));
this->ui->ly->setText(QString::number(p.y()));
}
5. Y si quieres capturar el teclado Capturando los eventos del teclado en un QLabel
No hay comentarios:
Publicar un comentario