第一步:创建带ui界面的项目并在ui界面上拖放一个QLabel,一个QLineEdit并将QLineEdit设置为
第二步:创MyLabel类(这个根据自己的需要命名)
第三步:编写mylabel.h代码和mylabel.cpp代码
mylabel.h
#ifndef MYLABEL_H
#define MYLABEL_H
#include <QWidget>
#include <QLabel>
#include <QEvent>
class MyLabel : public QLabel
{
Q_OBJECT
public:
explicit MyLabel(QWidget *parent = nullptr);
protected:
virtual void enterEvent(QEvent *event) override;
virtual void leaveEvent(QEvent *event) override;
signals:
void enter();
void leave();
};
#endif // MYLABEL_H
mylabel.cpp
#include "mylabel.h"
MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{
}
void MyLabel::enterEvent(QEvent *event)
{
Q_UNUSED(event);
emit enter();
}
void MyLabel::leaveEvent(QEvent *event)
{
Q_UNUSED(event);
emit leave();
}
这里发送信号是为了和主界面进行交互
第四步:在创建项目时产生的widget.h和widget.cpp书写如下代码
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QEvent>
namespace Ui {
class Widget;
}
class Widget: public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
public slots:
void et();
void lt();
private:
Ui::Widget*ui;
};
#endif //WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include "mylabel.h"
#include <QPixmap>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->label->setScaledContents(true);
connect(ui->label,&MyLabel::enter,this,&Widget::et);
connect(ui->label,&MyLabel::leave,this,&Widget::lt);
}
Widget::~Widget()
{
delete ui;
}
void Widget::et()
{
ui->label->setPixmap(QPixmap(":/img/oe.jpeg"));
ui->lineEdit->setEchoMode(QLineEdit::Normal);
}
void Widget::lt()
{
ui->label->setPixmap(QPixmap(":/img/ce.jpeg"));
ui->lineEdit->setEchoMode(QLineEdit::Password);
}
以上添加了图片资源文件,一个是闭眼一个是开眼,就和显示密码和隐藏密码差不多
完成以上代码后再ui设计界面点击label将label提升为类MyLabel
效果截图
鼠标箭头未到label上时
鼠标箭头在label上时