一般说只在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上点击获得的效果的更多相关文章

  1. iOS UIButton加在window上点击无效果问题

    UIButton加在window上,点击没有效果,找了很久,原来是没有加上这名:[self.window makeKeyAndVisible]; self.window = [[UIWindow al ...

  2. UITableView或UIScrollVIew上的UIButton的高亮效果

    UITableView或UIScrollVIew上的UIButton的高亮效果 原文地址:http://www.jianshu.com/p/b4331f06bd34 最近做项目的时候发现,UIScro ...

  3. WIN7系统IIS上发布站点后水印效果失效的解决方法

    关于使用一般处理程序给图片添加水印的方法,请参考: 使用一般处理程序(IHttpHandler)制作图片水印 有些时候,给图片添加水印了,在本机运行也都正常,但是发布到IIS上后就没有水印效果了.本人 ...

  4. 超强的纯 CSS 鼠标点击拖拽效果

    背景 鼠标拖拽元素移动,算是一个稍微有点点复杂的交互. 而在本文,我们就将打破常规,向大家介绍一种超强的仅仅使用纯 CSS 就能够实现的鼠标点击拖拽效果. 在之前的这篇文章中 -- 不可思议的纯 CS ...

  5. EasyTouch绑定事件在电脑上点击有效Android上无效的解决方法

    最近做一个RPG类的游戏发现使用EasyTouch虚拟摇杆插件在电脑上点击有效Android上无效,查找资料发现是Easy Joystick中的一个属性interaction type要设置成 Dir ...

  6. Qt之添加QLabel的点击事件

    QLabel功能为显示了一个字符串或者图片等信息,它本身没有click信号.也就不能够响应click点击事件,有什么办法来实现来,我们可以子类化QLabel,实现MouseXXXEvent.class ...

  7. TypeWonder – 在任何网站上实时预览字体效果

    TypeWonder 让网页字体的选择过程变得轻松愉快.它可以帮助您在任何网站上快速测试 Web 字体效果!输入网站网址,就能够即时预览的字体的实际效果,还可以从数百种字体中进行挑选,您还可以得到所需 ...

  8. nodejs 微信中使用file组件上传图片在某些机型上点击无反应

    看下下面的代码: <form action="/" class="file_upload" method="post" enctype ...

  9. ios点击产生波纹效果

    ios点击产生波纹效果 by 伍雪颖 - (void)viewDidLoad { [super viewDidLoad]; RippleView = [[UIView alloc] initWithF ...

随机推荐

  1. 用endsWith()来限制图片的后缀名

    var a=document.getElementById('file-name'); var filename=a.value if(!a.endsWith('.jpg')||!a.endsWith ...

  2. android style 退出动画 解决退出动画无效问题

    在AndroidMenifest.xml文件里面的Activity声明中,增加自己的Theme声明,如下: <activity android:name=".MyOrderListSe ...

  3. where子句的具体含义

    今天同学让我帮他调代码,下面是出错的那句: txtSQL= "select * from student_Info where UserID='" & cboUserID. ...

  4. 使用EMOJI表情

    因为IOS系统支持日文中的字块编码,所以在UILable,UITextField,UIAlertView等控件中使用emoji表情编码(emoji就是表情符号:词义来自日语(えもじ,e-moji,mo ...

  5. android不自动弹出虚拟键盘

    如果是Activity的话 在 Manifest.xml 相应的 Activity 里添加 android:windowSoftInputMode="adjustPan|stateHidde ...

  6. [转] 用GDB调试程序(五)

    转:http://blog.csdn.net/haoel/article/details/2883 查看运行时数据———————        在你调试程序时,当程序被停住时,你可以使用print命令 ...

  7. Android 百度地图 SDK v3.0.0 (一)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37729091 最近公司要把百度地图集成的项目中,于是我就研究了一天百度地图的SD ...

  8. 小学生之Map集合框架的使用

    Map用于保存具有映射关系的数据(key-vlaue).Map的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较总是返回false Map中包含了一个keySet()方法, ...

  9. CSS 之 margin知识点

    1.margin的百分比值 普通元素的百分比maigin相对于容器元素的宽度(width) 进行计算的. 这里我们在图片外面设置一个宽高分别为800 * 600的容器.设置img{ margin: 1 ...

  10. php function_name($type=0,$order_ids='',$flag=2)

    $order_ids='',表示$order_ids是字符串,不是数组 foreach ($order_ids as $key=>$order_id){            //TODO} 这 ...