Qt 给控件QLineEdit添加clicked事件方法
?????? 做Qt開發的會知道QLineEdit是默認沒有clicked事件的,但是Qt有很好的一套信號/槽機制,而且Qt是基于C++面向對象的思想來設計的,那么我們就很容易通過自己定義一些類,重寫QLineEdit的一些方法去實現沒有的方法,比如clicked事件.本人就以QLineEdit 添加clicked事件來說明.
Qt里面有個關鍵字emit,這個關鍵字意思就是觸發一個信號,具體emit更詳細的使用方法,可以百度,本文不做具體詳解,只需知道emit是觸發一個信號的方法即可.
下面我們就開始講如何給QLineEdit添加clicked()事件.首先我們需要一個類,繼承QLineEdit,我們定義為:mylineedit。
1、選中項目右擊選擇添加新文件,類名為:mylineedit。
?
?
?
2、分析下clicked()事件,這個事件是因為我們鼠標單擊點擊了下LineEdit控件,然后觸發的,那么正好,我們想到了在Qt有個mousePressEvent事件,于是我們可以重寫mousePressEvent事件,然后觸發自定義一個clicked()的信號,這樣就可以實現點擊LineEdit就會發送一個clicked()的信號,代碼如下:
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()信號,在mousePressEvent事件發生時觸發void clicked();public slots: };#endif // MYLINEEDIT_Hmylineedit.cpp
?
#include "mylineedit.h"mylineedit::mylineedit(QWidget *parent) :QLineEdit(parent) {}//重寫mousePressEvent事件,檢測事件類型是不是點擊了鼠標左鍵 void mylineedit::mousePressEvent(QMouseEvent *event) {//如果單擊了就觸發clicked信號if (event->button() == Qt::LeftButton){//觸發clicked信號 emit clicked();}//將該事件傳給父類處理QLineEdit::mousePressEvent(event); }?
3、通過以上代碼,我們的LineEdit已經具有了發出clicked信號的能力,那么我們就可以把他做為一個組件放到QWidget或者其他容器里面,在QWidget類里面我們提供一個處理LineEditclicked信號的槽函數,然后在QWidget構造函數里面綁定LineEditclicked信號跟對應的處理函數,這樣就可以達到我們想要的效果.
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://定義槽函數處理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的構造函數綁定lineedit的clicked信號connect(ui->lineEdit, SIGNAL(clicked()), this, SLOT(handlelineeditclicked()));}Widget::~Widget() {delete ui; }void Widget::handlelineeditclicked() {//在處理lineedit clicked函數里我們將lineedit背景色變為紅色ui->lineEdit->setStyleSheet("background-color:red"); }?
4、最后一定要將界面上的LineEdit控件提升為我們自定義的mylineedit類。
界面上右擊LineEdit控件提升為,填寫提升的類名稱,點擊添加即可。
5、運行之后的效果就是點擊LineEdit,然后LineEdit背景變為紅色.效果如下:
?注:此文章參考網上,結合本人實際實現的效果。
轉載于:https://www.cnblogs.com/qiantao/p/9638050.html
總結
以上是生活随笔為你收集整理的Qt 给控件QLineEdit添加clicked事件方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IntelliJ IDEA 15发布
- 下一篇: iOS Assigning to 'id