在QLabel上点击获得的效果
一般说只在button中点击获得事件,作出相应的反应。而往往需要在QLabel上作出点击和触碰的效果。
我用qlabel做出了一个效果,当鼠标碰到label区域,label底下出现一条线,离开后线条消失。当点击label后变颜色
以下是我的代码
// label.h
#include<QLabel>
classlabel:publicQLabel
{
Q_OBJECT
public:
explicitlabel(QStringstr,QWidget*parent=);
virtualvoidmousePressEvent(QMouseEvent*event);
voidmouseReleaseEvent(QMouseEvent*event);
voidenterEvent(QEvent*);
voidleaveEvent(QEvent*);
intcount;
voidpaintEvent(QPaintEvent*event);
boolover;
boolpress;
signals:
//自定义clicked()信号,在mousePressEvent事件发生时触发
voidclicked();
publicslots:
voidchange_color();
};
//label.cpp
#include"label.h"
#include<QMouseEvent>
#include<QPainter>
#include<QPalette>
label::label(QStringstr,QWidget*parent):
QLabel(parent)
{
QPalettepalette;
palette.setColor(QPalette::WindowText,QColor(,,));
this->setText(str);
this->setPalette(palette);
setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
//this->setStyleSheet("background-color:blue");
this->setCursor(Qt::PointingHandCursor);
count=;
press=false;
over=false;
connect(this,SIGNAL(clicked()),this,SLOT(change_color()));
}
voidlabel::mousePressEvent(QMouseEvent*event)
{
//如果单击了就触发clicked信号
if(event->button()==Qt::LeftButton)
{
//触发clicked信号
count++;
press=true;
emitclicked();
}
//将该事件传给父类处理
QLabel::mousePressEvent(event);
}
voidlabel::mouseReleaseEvent(QMouseEvent*event)
{
press=false;
update();
}
voidlabel::enterEvent(QEvent*)
{
over=true;
update();
}
voidlabel::leaveEvent(QEvent*)
{
over=false;
update();
}
voidlabel::change_color()
{
if(count%)
this->setStyleSheet("background-color:red");
else
this->setStyleSheet("background-color:blue");
}
voidlabel::paintEvent(QPaintEvent*event)
{
QPainterpaint(this);
paint.setPen(QPen(Qt::yellow,));
if(over)
{
paint.drawLine(,this->height()-,this->width()-,this->height()-);
}
else
{
paint.setPen(Qt::NoPen);
}
QLabel::paintEvent(event);
}
//MainWindow.h
#include<QWidget>
#include"label.h"
classMainWindow:publicQWidget
{
Q_OBJECT
public:
label*la;
explicitMainWindow(QWidget*parent=);
~MainWindow();
};
//MainWindow.cpp
#include"mainwindow.h"
#include<QLabel>
MainWindow::MainWindow(QWidget*parent):
QWidget(parent)
{
setFixedSize(,);
la=newlabel("192.168.199.245",this);
la->setGeometry(,,,);
}
MainWindow::~MainWindow()
{
}
//main.cpp
#include"mainwindow.h"
#include<QApplication>
intmain(intargc,char*argv[])
{
QApplicationa(argc,argv);
MainWindoww;
w.show();
returna.exec();
}
仅供初学者参考
在QLabel上点击获得的效果的更多相关文章
- iOS UIButton加在window上点击无效果问题
UIButton加在window上,点击没有效果,找了很久,原来是没有加上这名:[self.window makeKeyAndVisible]; self.window = [[UIWindow al ...
- UITableView或UIScrollVIew上的UIButton的高亮效果
UITableView或UIScrollVIew上的UIButton的高亮效果 原文地址:http://www.jianshu.com/p/b4331f06bd34 最近做项目的时候发现,UIScro ...
- WIN7系统IIS上发布站点后水印效果失效的解决方法
关于使用一般处理程序给图片添加水印的方法,请参考: 使用一般处理程序(IHttpHandler)制作图片水印 有些时候,给图片添加水印了,在本机运行也都正常,但是发布到IIS上后就没有水印效果了.本人 ...
- 超强的纯 CSS 鼠标点击拖拽效果
背景 鼠标拖拽元素移动,算是一个稍微有点点复杂的交互. 而在本文,我们就将打破常规,向大家介绍一种超强的仅仅使用纯 CSS 就能够实现的鼠标点击拖拽效果. 在之前的这篇文章中 -- 不可思议的纯 CS ...
- EasyTouch绑定事件在电脑上点击有效Android上无效的解决方法
最近做一个RPG类的游戏发现使用EasyTouch虚拟摇杆插件在电脑上点击有效Android上无效,查找资料发现是Easy Joystick中的一个属性interaction type要设置成 Dir ...
- Qt之添加QLabel的点击事件
QLabel功能为显示了一个字符串或者图片等信息,它本身没有click信号.也就不能够响应click点击事件,有什么办法来实现来,我们可以子类化QLabel,实现MouseXXXEvent.class ...
- TypeWonder – 在任何网站上实时预览字体效果
TypeWonder 让网页字体的选择过程变得轻松愉快.它可以帮助您在任何网站上快速测试 Web 字体效果!输入网站网址,就能够即时预览的字体的实际效果,还可以从数百种字体中进行挑选,您还可以得到所需 ...
- nodejs 微信中使用file组件上传图片在某些机型上点击无反应
看下下面的代码: <form action="/" class="file_upload" method="post" enctype ...
- ios点击产生波纹效果
ios点击产生波纹效果 by 伍雪颖 - (void)viewDidLoad { [super viewDidLoad]; RippleView = [[UIView alloc] initWithF ...
随机推荐
- linux 虚拟机下配置tomcat
1.在wind系统下载tomcat,tomcat8版本的需要jdk1.8以上的才支持. 下载位置:http://tomcat.apache.org/download-80.cgi -> core ...
- jquery动态添加元素无法触发绑定事件的解决方案。
jquery动态添加元素无法触发绑定的事件的解决方案. ╭(●`∀´●)╯二狗最近在工作中遇到一个问题,即当用jquery动态添加元素后,发现给动态添加的元素却无法触发事件(╯#-_-)╯╧═╧ ( ...
- JavaScript的闭包详解
(1)定义: 函数内部返回一个函数,返回出来的这个函数叫做被我们称之为闭包(个人理解的最简单的表现形式,) (2)为什么要使用闭包呢? 局部变量在函数执行完之后就会被GC回收,有时候我们想在外部访问内 ...
- SQL注入语句 (很全)
1.返回的是连接的数据库名and db_name()>02.作用是获取连接用户名and user>03.将数据库备份到Web目录下面;backup database 数据库名 to dis ...
- SKPhysicsJoint类
继承自 NSObject 符合 NSCodingNSObject(NSObject) 框架 /System/Library/Frameworks/SpriteKit.framework 可用性 可用 ...
- Android Studio中解决Gradle DSL method not found: 'android()'
近期导入as的项目出了这种问题 这个问题困扰了我非常长时间,好吧,搜了半天全都是runProguard的.最后在stackoverflow上搜到解决的方法了: http://stackoverflow ...
- Embedded tomcat 7 servlet 3.0 annotations not working--转
Question: I have a stripped down test project which contains a Servlet version 3.0, declared with an ...
- HashSet与HashMap
HashSet底层由HashMap实现 Hash表:存放链表表头的数组 HashSet的值存放于HashMap的key上,而HashMap的value统一为PRESENT(private static ...
- sass笔记-3|Sass基础语法之样式复用和保持简洁
上一篇详述了Sass如何嵌套.导入和注释这3个基本方式来保持条理性和可读性,这一篇更进一步地阐述sass保持样式复用和简洁的方式--混合器和选择器继承--这两种方式都能复用样式,使用它们也不难,但一定 ...
- DataGrid 使用模型列后实现点击列名称排序
DataGrid 使用模型列后实现点击列名称排序 代码如下: <DataGridTemplateColumn Header="型 号" SortMemberPath=&quo ...