在写qt ui时候很多控件没有鼠标点击事件,这里以LineEdit为例对其重写类并添加鼠标点击事件;博客参考于:http://www.jyguagua.com/?p=668;
分为三步:
1、重写lineEdit类;
2、在widget中添加对应启动的信号和槽事件;
3、在ui窗口中将linEdit控件提升到重写的类里;
下面为源码:
mylineedit.h
#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H
#include <QLineEdit>
#include<QMouseEvent>
class MyLineEdit:public QLineEdit
//添加mylineedit类继承QLineEdit
{
Q_OBJECT
public:
explicit MyLineEdit(QWidget *parent = 0);
~MyLineEdit();
protected:
//添加并重写鼠标点击事件函数
virtual void mousePressEvent(QMouseEvent *e);
signals:
//点击信号函数
void clicked();
};
#endif // MYLINEEDIT_H
mylineedit.cpp
#include "mylineedit.h"
MyLineEdit::MyLineEdit(QWidget *parent):QLineEdit(parent)
{}
MyLineEdit::~MyLineEdit()
{}
//重写mousePressEvent事件,检测事件类型是不是点击了鼠标左键
void MyLineEdit::mousePressEvent(QMouseEvent *e) {
//如果单击了就触发clicked信号
if (e->button() == Qt::LeftButton) {
//触发clicked信号
emit clicked();
}
//将该事件传给父类处理
// QLineEdit::mousePressEvent(e);
}
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include"mylineedit.h"
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
private slots:
//添加槽函数
void lineEditClicked();
};
#endif // WIDGET_H
include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//添加链接,当点击发送到
connect(ui->lineEdit, SIGNAL(clicked()), this, SLOT(lineEditClicked()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::lineEditClicked() {
//在处理lineedit clicked函数里我们将lineedit背景色变蓝色
ui->lineEdit->setStyleSheet("background-color:blue");
}
关于lineEdit控件的提升不知为,点击进入窗口ui设计界面——选中lineEdit控件——右键——提升为——在提升类名称里添加刚刚重写的类MyLineEdit,然后选中——提升;
如下图所示: