QT --- Qt的lineEdit添加鼠标点击事件

简介: QT --- Qt的lineEdit添加鼠标点击事件

QT的很多控件没有设置鼠标点击事件,这里以lineEdit为例重写类并添加鼠标点击事件

具体步骤如下:

1. 重写lineEdit类,自定义mousePressEvent的相关操作,在头文件中申明SIGNAL

2. 在主程序中添加lineEdit的槽函数

3. 在UI窗口中将lineEdit控件提升为自定义的lineEdit类

 

具体源码如下:

mylineedit.h

1. #ifndef MYLINEEDIT_H
2. #define MYLINEEDIT_H
3. 
4. #include <QWidget>
5. #include <QLineEdit>
6. #include <QMouseEvent>
7. 
8. class myLineEdit : public QLineEdit
9. {
10.     Q_OBJECT
11. public:
12. explicit myLineEdit(QWidget *parent = nullptr);
13. 
14. void mousePressEvent(QMouseEvent *e);
15. 
16. signals:
17. void clicked();
18. 
19. };
20. 
21. #endif // MYLINEEDIT_H

mylineedit.cpp

1. #include "mylineedit.h"
2. 
3. myLineEdit::myLineEdit(QWidget *parent) : QLineEdit(parent)
4. {
5. 
6. }
7. 
8. void myLineEdit::mousePressEvent(QMouseEvent *e)
9. {
10. if(e->button() == Qt::LeftButton)    //鼠标左键点击触发signal
11.     {
12.         emit clicked();            
13.     }
14. 
15. }

mainwindow.h

1. #ifndef MAINWINDOW_H
2. #define MAINWINDOW_H
3. 
4. #include <QMainWindow>
5. 
6. QT_BEGIN_NAMESPACE
7. namespace Ui { class MainWindow; }
8. QT_END_NAMESPACE
9. 
10. class MainWindow : public QMainWindow
11. {
12.     Q_OBJECT
13. 
14. public:
15. MainWindow(QWidget *parent = nullptr);
16.     ~MainWindow();
17. 
18. private:
19.     Ui::MainWindow *ui;
20. 
21. private slots:
22. void lineEditClicked();
23. 
24. 
25. };
26. #endif // MAINWINDOW_H

mainwindow.cpp

1. #include "mainwindow.h"
2. #include "ui_mainwindow.h"
3. 
4. #include "mylineedit.h"
5. 
6. MainWindow::MainWindow(QWidget *parent)
7.     : QMainWindow(parent)
8.     , ui(new Ui::MainWindow)
9. {
10.     ui->setupUi(this);
11. 
12.     ui->lineEdit->setText("1");
13. 
14.     connect(ui->lineEdit, SIGNAL(clicked()), this, SLOT(lineEditClicked()));
15. }
16. 
17. void MainWindow::lineEditClicked()
18. {
19.     int t = ui->lineEdit->text().toInt();
20. if(t == 1)
21.     {
22.         ui->lineEdit->setText("0");
23.         ui->lineEdit->setStyleSheet("background-color:gray");
24.     }
25. if(t == 0)
26.     {
27.         ui->lineEdit->setText("1");
28.         ui->lineEdit->setStyleSheet("background-color:red");
29.     }
30. }
31. 
32. MainWindow::~MainWindow()
33. {
34. delete ui;
35. }
36.

lineEdit控件的提升操作,点击进入窗口ui设计界面——选中lineEdit控件——右键——提升为——在提升类名称里添加刚刚重写的类myLineEdit,然后选中——提升;

完成提升操作之后,可以看到lineEdit控件已经变成myLineEdit属性

相关文章
|
7月前
|
存储 机器学习/深度学习 人工智能
Qt魔法书:打造自定义鼠标键盘脚本(二)
Qt魔法书:打造自定义鼠标键盘脚本
219 0
|
存储 Cloud Native Linux
Qt 关于mouseTracking鼠标追踪和tabletTracking平板追踪的几点官方说明
Qt 关于mouseTracking鼠标追踪和tabletTracking平板追踪的几点官方说明
QT+OpenGL鼠标操作和模型控制
光线追踪法 从鼠标投射 3D 射线, 通过摄像机,进入场景,然后检查该光线是否与某个对象相交。
357 0
|
7月前
|
开发框架 Linux API
Qt魔法书:打造自定义鼠标键盘脚本(一)
Qt魔法书:打造自定义鼠标键盘脚本
83 0
|
7月前
|
C++
QT 重写控件(QPushButton为例)实现背景图片的切换和鼠标样式切换
一般在QT开发中,使用setCursor()给控件设置鼠标的样式效果(一般是手型和箭头的切换),一般情况下,这个函数也是起作用的,但是一旦调用了全局QApplication::setOverrideCursor()设置鼠标效果后,在使用setCursor给控件设置鼠标样式就不起效果了,这是QT的机制
370 0
|
7月前
|
数据安全/隐私保护 容器
[Qt5&控件] 控件stackedWidget、lineEdit等的用法
[Qt5&控件] 控件stackedWidget、lineEdit等的用法
93 0
[Qt5&控件] 控件stackedWidget、lineEdit等的用法
|
7月前
Qt鼠标悬浮在图片上显示删除字样
Qt鼠标悬浮在图片上显示删除字样
|
7月前
[Qt5] 鼠标响应事件和计时器事件
[Qt5] 鼠标响应事件和计时器事件
61 0
|
7月前
|
C++
[Qt5&控件] 编辑框LineEdit上的数进行四则运算
[Qt5&控件] 编辑框LineEdit上的数进行四则运算
63 0