在QLabel上点击获得的效果

一般说只在button中点击获得事件,作出相应的反应。而往往需要在QLabel上作出点击和触碰的效果。


我用qlabel做出了一个效果,当鼠标碰到label区域,label底下出现一条线,离开后线条消失。当点击label后变颜色


以下是我的代码

// label.h

#include <QLabel>

class label :public QLabel
{
    Q_OBJECT
public:
    explicit label(QString str,QWidget *parent = 0);
    virtual void mousePressEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
    void enterEvent(QEvent *);
    void leaveEvent(QEvent *);
    int count;
    void paintEvent(QPaintEvent *event);
    bool over;
    bool press;

signals:
    //自定义clicked()信号,在mousePressEvent事件发生时触发
    void clicked();
public slots:
    void change_color();
};

//label.cpp

#include "label.h"
#include <QMouseEvent>
#include <QPainter>
#include <QPalette>

label::label(QString str,QWidget *parent) :
    QLabel(parent)
{

    QPalette palette;
    palette.setColor(QPalette::WindowText,QColor(50,255,255));

    this->setText(str);
    this->setPalette(palette);

    setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
  //  this->setStyleSheet("background-color:blue");
    this->setCursor(Qt::PointingHandCursor);

    count = 0;
    press = false;
    over = false;
    connect(this,SIGNAL(clicked()),this,SLOT(change_color()));
}

void label::mousePressEvent(QMouseEvent *event)
{
    //如果单击了就触发clicked信号
    if (event->button() == Qt::LeftButton)
    {
        //触发clicked信号
        count++;
        press = true;
        emit clicked();

    }
    //将该事件传给父类处理
    QLabel::mousePressEvent(event);
}

void label:: mouseReleaseEvent(QMouseEvent *event)
{
   press = false;
   update();
}

void label::enterEvent(QEvent *)
{
    over =true;
    update();
}

void label::leaveEvent(QEvent *)
{
    over = false;
    update();
}

void label::change_color()
{
    if(count%2)
        this->setStyleSheet("background-color:red");
    else
        this->setStyleSheet("background-color:blue");
}

void label::paintEvent(QPaintEvent *event)
{

    QPainter paint(this);
    paint.setPen(QPen(Qt::yellow,1));
    if(over)
    {

        paint.drawLine(5,this->height()-5,this->width()-5,this->height()-5);

    }
    else
    {
        paint.setPen(Qt::NoPen);
    }
    QLabel::paintEvent(event);
}

//MainWindow.h
#include <QWidget>
#include "label.h"
class MainWindow : public QWidget
{
    Q_OBJECT
    
public:
    label *la;
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
};
//MainWindow.cpp
#include "mainwindow.h"
#include <QLabel>
MainWindow::MainWindow(QWidget *parent) :
    QWidget(parent)
{
    setFixedSize(200,100);
    la =new label("192.168.199.245",this);
    la->setGeometry(50,30,100,30);
}
MainWindow::~MainWindow()
{
}

//main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    
    return a.exec();
}
仅供初学者参考

你可能感兴趣的:(在QLabel上点击获得的效果)