Qt 给控件QLineEdit添加clicked事件方法
?????? 做Qt開(kāi)發(fā)的會(huì)知道QLineEdit是默認(rèn)沒(méi)有clicked事件的,但是Qt有很好的一套信號(hào)/槽機(jī)制,而且Qt是基于C++面向?qū)ο蟮乃枷雭?lái)設(shè)計(jì)的,那么我們就很容易通過(guò)自己定義一些類,重寫QLineEdit的一些方法去實(shí)現(xiàn)沒(méi)有的方法,比如clicked事件.本人就以QLineEdit 添加clicked事件來(lái)說(shuō)明.
Qt里面有個(gè)關(guān)鍵字emit,這個(gè)關(guān)鍵字意思就是觸發(fā)一個(gè)信號(hào),具體emit更詳細(xì)的使用方法,可以百度,本文不做具體詳解,只需知道emit是觸發(fā)一個(gè)信號(hào)的方法即可.
下面我們就開(kāi)始講如何給QLineEdit添加clicked()事件.首先我們需要一個(gè)類,繼承QLineEdit,我們定義為:mylineedit。
1、選中項(xiàng)目右擊選擇添加新文件,類名為:mylineedit。
?
?
?
2、分析下clicked()事件,這個(gè)事件是因?yàn)槲覀兪髽?biāo)單擊點(diǎn)擊了下LineEdit控件,然后觸發(fā)的,那么正好,我們想到了在Qt有個(gè)mousePressEvent事件,于是我們可以重寫mousePressEvent事件,然后觸發(fā)自定義一個(gè)clicked()的信號(hào),這樣就可以實(shí)現(xiàn)點(diǎn)擊LineEdit就會(huì)發(fā)送一個(gè)clicked()的信號(hào),代碼如下:
mylineedit.h
#ifndef MYLINEEDIT_H #define MYLINEEDIT_H #include <QLineEdit> #include <QMouseEvent>class mylineedit: public QLineEdit {Q_OBJECT public:mylineedit();explicit mylineedit(QWidget *parent = 0); protected://重寫mousePressEvent事件virtual void mousePressEvent(QMouseEvent *event);signals://自定義clicked()信號(hào),在mousePressEvent事件發(fā)生時(shí)觸發(fā)void clicked();public slots: };#endif // MYLINEEDIT_Hmylineedit.cpp
?
#include "mylineedit.h"mylineedit::mylineedit(QWidget *parent) :QLineEdit(parent) {}//重寫mousePressEvent事件,檢測(cè)事件類型是不是點(diǎn)擊了鼠標(biāo)左鍵 void mylineedit::mousePressEvent(QMouseEvent *event) {//如果單擊了就觸發(fā)clicked信號(hào)if (event->button() == Qt::LeftButton){//觸發(fā)clicked信號(hào) emit clicked();}//將該事件傳給父類處理QLineEdit::mousePressEvent(event); }?
3、通過(guò)以上代碼,我們的LineEdit已經(jīng)具有了發(fā)出clicked信號(hào)的能力,那么我們就可以把他做為一個(gè)組件放到QWidget或者其他容器里面,在QWidget類里面我們提供一個(gè)處理LineEditclicked信號(hào)的槽函數(shù),然后在QWidget構(gòu)造函數(shù)里面綁定LineEditclicked信號(hào)跟對(duì)應(yīng)的處理函數(shù),這樣就可以達(dá)到我們想要的效果.
widget.h
#ifndef WIDGET_H #define WIDGET_H#include <QWidget>namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private:Ui::Widget *ui;private slots://定義槽函數(shù)處理lineedit clickedvoid handlelineeditclicked();};#endif // WIDGET_Hwidget.cpp
?
#include "widget.h" #include "ui_widget.h" #include"mylineedit.h" Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);//在widget的構(gòu)造函數(shù)綁定lineedit的clicked信號(hào)connect(ui->lineEdit, SIGNAL(clicked()), this, SLOT(handlelineeditclicked()));}Widget::~Widget() {delete ui; }void Widget::handlelineeditclicked() {//在處理lineedit clicked函數(shù)里我們將lineedit背景色變?yōu)榧t色ui->lineEdit->setStyleSheet("background-color:red"); }?
4、最后一定要將界面上的LineEdit控件提升為我們自定義的mylineedit類。
界面上右擊LineEdit控件提升為,填寫提升的類名稱,點(diǎn)擊添加即可。
5、運(yùn)行之后的效果就是點(diǎn)擊LineEdit,然后LineEdit背景變?yōu)榧t色.效果如下:
?注:此文章參考網(wǎng)上,結(jié)合本人實(shí)際實(shí)現(xiàn)的效果。
轉(zhuǎn)載于:https://www.cnblogs.com/qiantao/p/9638050.html
總結(jié)
以上是生活随笔為你收集整理的Qt 给控件QLineEdit添加clicked事件方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: IntelliJ IDEA 15发布
- 下一篇: ubuntu14 + nginx + p