您的位置:首页 > 编程语言 > Qt开发

Qt QLineEdit QLabel添加clicked事件,给控件添加事件方法

2014-12-08 08:17 639 查看
本文链接地址:
Qt QLineEdit QLabel添加clicked事件

小编温馨提醒:以下内容有纯属参考,大概率会出现信号没有传递的问题

接下来给大家一个简单的发送信号的方式



做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

#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


#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,然后lineedit背景变为红色.同理,QLabel增加clicked功能也可以实现了.效果如下:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: