加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

QLabel实现点击发送信号clicked

(2015-10-30 09:57:01)
标签:

qlabel

clicked

qt

it

分类: qt
不多说,直接发代码

#ifndef CCLICKLABEL_H
#define CCLICKLABEL_H

#include "stdafx.h"

class CClickLabelPrivate;

class CClickLabel : public QLabel
{

    Q_OBJECT
   public:
       CClickLabel(QWidget *parent = 0, Qt::WindowFlags f = 0);
       CClickLabel(const QString &text, QWidget *parent = 0,
               Qt::WindowFlags f = 0);
       virtual ~CClickLabel();
   Q_SIGNALS:
       /// @brief emit when mouse click label
       void clicked();
   protected:
       virtual void mousePressEvent(QMouseEvent *e);
       virtual void mouseReleaseEvent(QMouseEvent *e);
   private:
       Q_DISABLE_COPY(CClickLabel)
       Q_DECLARE_PRIVATE(CClickLabel)
       CClickLabelPrivate* const d_ptr;
};

#endif // CCLICKLABEL_H



// **************************************************************************

// share library for Qt (C++)

// 共享源码库

// 文档说明:可发出clicked信号的Label部件

// ==========================================================================

/// @file CClickLabel.cpp 可发出clicked信号的Label部件

// ==========================================================================

#include "../../include/CClickLabel.h"



class CClickLabelPrivate

{

    Q_DECLARE_PUBLIC(CClickLabel)

public:

    explicit CClickLabelPrivate(CClickLabel *qptr);

    ~CClickLabelPrivate();

    QPoint pos;

    CClickLabel* const q_ptr;

};



CClickLabelPrivate::CClickLabelPrivate(CClickLabel *qptr) : q_ptr(qptr)

{

}



CClickLabelPrivate::~CClickLabelPrivate()

{

}



CClickLabel::CClickLabel(QWidget *parent, Qt::WindowFlags f)

    : QLabel(parent, f), d_ptr(new CClickLabelPrivate(this))

{

}



CClickLabel::CClickLabel(const QString &text, QWidget *parent, Qt::WindowFlags f)

    : QLabel(text, parent, f), d_ptr(new CClickLabelPrivate(this))

{

}



CClickLabel::~CClickLabel()

{

    delete d_ptr;

}



void CClickLabel::mousePressEvent(QMouseEvent *e)

{

    QLabel::mousePressEvent(e);



    Q_D(CClickLabel);

    if (e->button() == Qt::LeftButton)

    {

        d->pos = e->pos();

    }

}



void CClickLabel::mouseReleaseEvent(QMouseEvent *e)

{

    QLabel::mouseReleaseEvent(e);



    Q_D(CClickLabel);

    if (e->button() == Qt::LeftButton)

    {

        if (e->pos() == d->pos)

        {

            Q_EMIT clicked();

        }

    }

}




0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有