Qt 控件重写

今天在工作中遇到一个问题。双击LineEdit控件执行一个事件。
这样子问题就来了,我们LineEdit正常是单击光标悬浮的这种状态,所以我需要对这个控件进行重写。

因为是要重写,所以我们需要自定义QLineEdit。

Qt 控件重写

/*MyLineEdit.h*/
#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H

#include 
#include 
 
class MyLineEdit : public QLineEdit
{
	Q_OBJECT

public:
	explicit MyLineEdit(QWidget *parent = 0);
	~MyLineEdit();
protected:
	void mouseDoubleClickEvent(QMouseEvent *event);
};

#endif	// MYLINEEDIT_H

把你要让这个控件执行的事件放到你重写的这个类中,并实现它。

/*MyLineEdit.cpp*/
#include "mylineedit.h"
#include 
#include 

MyLineEdit::MyLineEdit(QWidget *parent) :
    QLineEdit(parent)
{

}

MyLineEdit::~MyLineEdit()
{

}

void MyLineEdit::mouseDoubleClickEvent(QMouseEvent *event)
{
    qDebug()<<"hi~我在执行QLineEdit双击事件~";
}

做完这步就相当于重写完成了,接下来就是需要使用这个自定义的类。

/*from.h*/
#ifndef FORM_H
#define FORM_H

#include 

namespace Ui {
class Form;
}

class Form : public QWidget
{
    Q_OBJECT

public:
    explicit Form(QWidget *parent = 0);
    ~Form();

private:
    Ui::Form *ui;
};

#endif // FORM_H

form.cpp
#include "form.h"
#include "ui_form.h"
#include "mylineedit.h"
Form::Form(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form)
{
    ui->setupUi(this);
    MyLineEdit* a = new MyLineEdit(this);
    ui->verticalLayout->addWidget(a);
}

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

Qt 控件重写_第1张图片
这样就实现了一个简单重写控件的demo了,重写其他控件也跟本博客大同小异。
注意:继承的是你要重写那个控件类!

你可能感兴趣的:(Qt,C/C++,qt,qt5)