【QT】重写控件类

一、重写点击事件(以QLineedit为例,使其像按键一样具有点击事件。)

1、添加重写类

cpp文件如下

#include "mylineedit.h"
#include "customize/function.h"
/*
    重写LineEdit的信号
    使其可以像按键一样触发clicked事件
*/


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

}

//重写mousePressEvent事件,检测事件类型是不是点击了鼠标左键
void mylineedit::mousePressEvent(QMouseEvent *event)
{
    //如果单击了就触发clicked信号
    if (event->button() == Qt::LeftButton)
    {
        //触发clicked信号
        emit clicked();
    }
    //将该事件传给父类处理
    QLineEdit::mousePressEvent(event);
}

头文件如下

#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H
#include 
#include 

class mylineedit: public QLineEdit
{
    Q_OBJECT
public:
   mylineedit();

    explicit mylineedit(QWidget *parent = nullptr);
protected:
    //重写mousePressEvent事件
    virtual void mousePressEvent(QMouseEvent *event);

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

public slots:
};

2、ui界面添加lineedit控件,右键选择提升为,将控件头文件和源文件添加,选中全局,将控件提升为mylineedit

3、绑定信号槽

connect(ui->editrate01 ,SIGNAL(clicked()),this,SLOT(on_ShowKeyBoard()));

二、重写焦点事件,

添加重写类、重写焦点事件、

//焦点移入事件
void myspinbox::focusInEvent(QFocusEvent *e)
{

    if(e->reason() == Qt::MouseFocusReason)
    {
    }
}
//焦点移除事件

void myspinbox::focusOutEvent(QFocusEvent *e)
{
    if(e->reason() == Qt::MouseFocusReason)
    {
    }
}

焦点事件也可以想以上一样添加clicked事件,checked事件等。

三、重写show、hide函数

打开响应界面时会执行showeven函数,反之执行hideeven函数,可利用此特点重写响应函数,使界面在显示、关闭时执行相应内容。以show函数为例

1、重写show函数

void CaseType::showEvent(QShowEvent* event)
{
    event = event;
    this->move(w->posx,w->posy);
}

2、声明

在类的private中声明即可   
void showEvent(QShowEvent* event);

你可能感兴趣的:(【QT】重写控件类)