当前位置: 移动技术网 > IT编程>开发语言>C/C++ > Qt 给控件QLineEdit添加clicked事件方法

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

2018年09月13日  | 移动技术网IT编程  | 我要评论

tvb直播软件,科比狂想的旅程,老表 你好嘢粤语

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

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

下面我们就开始讲如何给qlineedit添加clicked()事件.首先我们需要一个类,继承qlineedit,我们定义为:mylineedit。

1、选中项目右击选择添加新文件,类名为:mylineedit

 

 

 

2、分析下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:
   mylineedit();

    explicit mylineedit(qwidget *parent = 0);
protected:
    //重写mousepressevent事件
    virtual void mousepressevent(qmouseevent *event);

signals:
    //自定义clicked()信号,在mousepressevent事件发生时触发
    void clicked();

public slots:
};

#endif // mylineedit_h

mylineedit.cpp

 

#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);
}

 

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

widget.h

#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();

};

#endif // widget_h

widget.cpp

 

#include "widget.h"
#include "ui_widget.h"
#include"mylineedit.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()));

}

widget::~widget()
{
    delete ui;
}

void widget::handlelineeditclicked()
{
    //在处理lineedit clicked函数里我们将lineedit背景色变为红色
    ui->lineedit->setstylesheet("background-color:red");
}

 

4、最后一定要将界面上的lineedit控件提升为我们自定义的mylineedit类。

界面上右击lineedit控件提升为,填写提升的类名称,点击添加即可。

5、运行之后的效果就是点击lineedit,然后lineedit背景变为红色.效果如下:

 注:此文章参考网上,结合本人实际实现的效果。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网