实现Label的鼠标点击响应,以及获取焦点后改变颜色

游牧云 2016-10-09 11:07:48
QT里面的Label控件本身没有响应鼠标点击事件,而要实现Label对鼠标点击的响应,以及鼠标进入和离开时,颜色发生变化,创建了一个新的类ClickLabel,继承了QLabel类,覆写了鼠标进入离开事件、点击事件,实现了上述功能,源码如下:

File:ClickLabel.h
#ifndef CLICKLABEL_H
#define CLICKLABEL_H

#include <QLabel>

class ClickLabel:public QLabel
{
Q_OBJECT

public:
explicit ClickLabel(QWidget *parent = 0);
ClickLabel(const QString &text, QWidget *parent=0);

signals:
void clicked();//鼠标单击信号

protected:
// 鼠标单击事件
void mouseReleaseEvent(QMouseEvent *);
void enterEvent(QEvent *);
void leaveEvent(QEvent *);
};

#endif // CLICKLABEL_H


File:ClickLabel.cpp
#include "ClickLabel.h"
#include <QMouseEvent>

ClickLabel::ClickLabel(QWidget *parent):
QLabel(parent)
{
QPalette pa;
pa.setColor(QPalette::WindowText, Qt::blue);
setPalette(pa);
}

ClickLabel::ClickLabel(const QString &text, QWidget *parent):
QLabel(parent)
{
QPalette pa;
pa.setColor(QPalette::WindowText, Qt::blue);
setPalette(pa);
setText(text);
}

void ClickLabel::mouseReleaseEvent(QMouseEvent *ev)
{
if (ev->button() == Qt::LeftButton)
emit clicked();//(this);
}

void ClickLabel::enterEvent(QEvent *)
{
QPalette pa;
pa.setColor(QPalette::WindowText, Qt::red);
setPalette(pa);
}

void ClickLabel::leaveEvent(QEvent *)
{
QPalette pa;
pa.setColor(QPalette::WindowText, Qt::blue);
setPalette(pa);
}


...全文
441 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
画茧自缚 2016-10-10
  • 打赏
  • 举报
回复
http://blog.csdn.net/zbw1185/article/details/50540352

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧