Qt QLineEdit QLabel 添加clicked事件

本文介绍了如何利用Qt的信号/槽机制,通过自定义类和方法,为QLineEdit和QLabel添加clicked事件,实现用户交互功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做Qt开发的会知道QLineEdit,QLabel是默认没有clicked事件的,但是Qt有很好的一套信号/槽机制,而且Qt是基于C++面向对象的思想来设计的,那么我们就很容易通过自己定义一些类,重写QLineEdit或者QLabel的一些方法去实现没有的方法,比如clicked事件.本人就以QLineEdit QLabel添加clicked事件来说明.

Qt里面有个关键字emit,这个关键字意思就是触发一个信号,具体emit更详细的使用方法,可以百度,本文不做具体详解,只需知道emit是触发一个信号的方法即可.

下面我们就开始讲如何给QLineEdit添加clicked()事件.首先我们需要一个类,继承QLineEdit,我们定义为:mylineedit.那么分析下clicked()事件,这个事件是因为我们鼠标单击点击了下lineedit,然后触发的,那么正好,我们想到了在Qt有个mousePressEvent事件,于是我们可以重写mousePressEvent事件,然后触发自定义一个clicked()的信号,这样就可以实现点击lineedit就会发送一个clicked()的信号,代码如下:

mylineedit.h

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H
 
#include <QLineEdit>
#include <QMouseEvent>
 
class mylineedit : public QLineEdit
{
     Q_OBJECT
public :
     explicit mylineedit(QWidget *parent = 0);
protected :
     //重写mousePressEvent事件
     virtual void mousePressEvent(QMouseEvent *event);
 
signals:
     //自定义clicked()信号,在mousePressEvent事件发生时触发
     void clicked();
 
public slots:
 
};
 
#endif // MYLINEEDIT_H

mylineedit.cpp

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "mylineedit.h"
 
mylineedit::mylineedit(QWidget *parent) :
     QLineEdit(parent)
{
}
 
//重写mousePressEvent事件,检测事件类型是不是点击了鼠标左键
void mylineedit::mousePressEvent(QMouseEvent *event) {
     //如果单击了就触发clicked信号
     if (event->button() == Qt::LeftButton) {
         //触发clicked信号
         emit clicked();
     }
     //将该事件传给父类处理
     QLineEdit::mousePressEvent(event);
}

通过以上代码,我们的lineedit已经具有了发出clicked信号的能力,那么我们就可以把他做为一个组件放到QWidget或者其他容器里面,在QWidget类里面我们提供一个处理lineedit clicked信号的槽函数,然后在QWidget构造函数里面绑定lineedit clicked信号跟对应的处理函数,这样就可以达到我们想要的效果.

widget.h

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#ifndef WIDGET_H
#define WIDGET_H
 
# include <QWidget>
 
namespace Ui {
     class Widget;
}
 
class Widget : public QWidget
{
     Q_OBJECT
 
public :
     explicit Widget(QWidget *parent = 0 );
     ~Widget();
 
private :
     Ui::Widget *ui;
 
private slots:
     //定义槽函数处理lineedit clicked
     void handlelineeditclicked();
     void handlelabelclicked();
};
 
#endif // WIDGET_H

widget.cpp

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include "widget.h"
#include "ui_widget.h"
 
Widget::Widget(QWidget *parent) :
     QWidget(parent),
     ui( new Ui::Widget)
{
     ui->setupUi( this );
     //在widget的构造函数绑定lineedit的clicked信号
     connect(ui->lineEdit, SIGNAL(clicked()), this , SLOT(handlelineeditclicked()));
     connect(ui->label, SIGNAL(clicked()), this , SLOT(handlelabelclicked()));
}
 
Widget::~Widget()
{
     delete ui;
}
 
void Widget::handlelineeditclicked() {
     //在处理lineedit clicked函数里我们将lineedit背景色变为红色
     ui->lineEdit->setStyleSheet( "background-color:red" );
}
 
void Widget::handlelabelclicked() {
     ui->label->setStyleSheet( "background-color:green" );
}

这样,我们的lineedit便具有了clicked的功能了.

main.cpp

?
1
2
3
4
5
6
7
8
9
10
11
#include <QtGui/QApplication>
#include "widget.h"
 
int main( int argc, char *argv[])
{
     QApplication a(argc, argv);
     Widget w;
     w.show();
 
     return a.exec();
}

运行之后的效果就是点击lineedit,然后lineedit背景变为红色.同理,QLabel增加clicked功能也可以实现了.效果如下:

本人源代码下载:文件名:labellineeditclick.rar

http://sdrv.ms/TSVfls

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值