2010-12-03 35 views
7

J'ai fait un tour d'adresse et trouvé this forum thread dans lequel l'OP semble avoir eu le problème exact que j'ai. La question est, comment devrais-je hériter de QLabel et réimplémenter l'événement mousepressed? Je suppose que ce serait quelque chose comme ceci:Obtention d'un emplacement de clic de souris d'une étiquette en qt

class CustomLabel : public QLabel 
{ 
public: 
    //what about the constructors? 
    void mousePressEvent (QMouseEvent * ev); 
} 

void CustomLabel::mousePressEvent (QMouseEvent * ev) 
{ 
    QPoint = ev->pos(); 
    //I want to have another function get the event position. 
    //How would I achieve this? It's void! 
    //Is there perhaps some way to set up a signal and slot with the position? 
} 

Et après avoir réussi à créer un comment serais-je, classe CustomLabel en mesure de le mettre en mode conception?

+0

Avez-vous trouvé la deuxième solution de mettre l'étiquette de retour à la fenêtre principale? – arqam

Répondre

9

Oui, vous pouvez configurer un signal de votre classe CustomLabel et d'avoir votre version surchargée de mousePressEvent émettons. à savoir

class CustomLabel : public QLabel 
{ 
Q_OBJECT 
signals: 
    void mousePressed(const QPoint&); 

public: 
    CustomLabel(QWidget* parent = 0, Qt::WindowFlags f = 0); 
    CustomLabel(const QString& text, QWidget* parent = 0, Qt::WindowFlags f = 0); 

    void mousePressEvent(QMouseEvent* ev); 
}; 

void CustomLabel::mousePressEvent(QMouseEvent* ev) 
{ 
    const QPoint p = ev->pos(); 
    emit mousePressed(p); 
} 

CustomLabel::CustomLabel(QWidget * parent, Qt::WindowFlags f) 
    : QLabel(parent, f) {} 

CustomLabel::CustomLabel(const QString& text, QWidget* parent, Qt::WindowFlags f) 
    : QLabel(text, parent, f) {} 

Les constructeurs imitent seulement ceux de la base QLabel et donc simplement passer leurs arguments tout droit aux constructeurs de base correspondants.

+0

Comment ajouter une étiquette personnalisée à la vue de conception? – wrongusername

+0

@wrongusername: J'ai peur de ne pas savoir comment faire ça. Pardon. – Troubadour

+0

c'est bon, ne vous inquiétez pas, j'ai fini par utiliser un filtre d'événement à la place – wrongusername

1

Est-ce que c'est juste moi, ou QMouseEvent ne donne pas déjà l'information dont vous avez besoin?

int QMouseEvent :: x() const

Renvoie la position x du curseur de la souris, par rapport au widget qui a reçu l'événement.

Voir aussi y() et pos().

int QMouseEvent :: y() const

Renvoie la position y du curseur de la souris, par rapport au widget qui a reçu l'événement.

Voir aussi x() et pos().

Ref: http://doc.qt.nokia.com/4.7.old/qmouseevent.html#x

+0

Oh d'accord, désolé! Comment pourrais-je savoir s'il y a un clic de souris et obtenir la position? – wrongusername

1

comme ceci: D

void CustomLabel::mousePressEvent(QMouseEvent *ev) 
{ 
QString x = QString::number(ev->x()); 
QString y = QString::number(ev->y()); 
qDebug() << x << "," << y; 
}