一、重写点击事件(以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 <QLineEdit>
#include <QMouseEvent>
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);