2010-12-03 26 views
7

私はグーグルで調べて、this forum threadが見つかりました。そのOPには私が抱えている問題がありました。質問は、私はQLabelからどのように継承し、mousepressedイベントを再実装するのですか?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? 
} 

そして、私は成功しCustomLabelクラスを作成した後、どのように私は、デザインビューでそれを置くことができるだろう:私はそれがこのようなものになるだろう推測していますか?

+0

あなたがメインウィンドウに戻ってラベルを置くの第二の溶液を見つかりましたか? – arqam

答えて

9

はい、あなたはCustomLabelクラス上の信号を設定し、mousePressEventのあなたのオーバーライドされたバージョン、それを放出することができます。即ち

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) {} 

コンストラクタは単にベースQLabelのものを模倣し、したがって、単に対応するベースコンストラクタにまっすぐにそれらの引数を渡します。ちょうどこのよう

+0

このようなカスタムラベルをデザインビューに追加するにはどうすればよいですか? – wrongusername

+0

@wrongusername:私はそのビットをどうやってやるのか分からないのですが。ごめんなさい。 – Troubadour

+0

大丈夫です、心配しないで、代わりにイベントフィルタを使用しました – wrongusername

1

私はそれだけですか、またはQMouseEventは必要な情報をすでに提供していませんか?イベントを受け取ったウィジェットに対するマウスカーソルのx位置を返し

INT QMouseEvent :: X()constは

y()およびpos()も参照してください。イベントを受け取ったウィジェットに対するマウスカーソルのy位置を返し

INT QMouseEvent :: Y()constは

x()およびpos()も参照してください。

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

+0

ああ大丈夫、申し訳ありません!マウスクリックがあるかどうか分かり、そのポジションを取得するにはどうすればいいですか? – wrongusername

1

:Dは

void CustomLabel::mousePressEvent(QMouseEvent *ev) 
{ 
QString x = QString::number(ev->x()); 
QString y = QString::number(ev->y()); 
qDebug() << x << "," << y; 
} 
関連する問題