在写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_Hmylineedit.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); }widget.h #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
widget.cpp 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,然后选中——提升;
如下图所示:
编辑好后运行后如下,点击lineEdit控件则会变为蓝色:
