Qt QLineEdit QLabel 添加clicked事件
做Qt开发的会知道QLineEdit,QLabel是默认没有clicked事件的,但是Qt有很好的一套信号/槽机制,而且Qt是基于C++面向对象的思想来设计的,那么我们就很容易通过自己定义一些类,重写QLineEdit或者QLabel的一些方法去实现没有的方法,比如clicked事件.本人就以QLineEdit QLabel添加clicked事件来说明.
Qt里面有个关键字emit,这个关键字意思就是触发一个信号,具体emit更详细的使用方法,可以百度,本文不做具体详解,只需知道emit是触发一个信号的方法即可.
下面我们就开始讲如何给QLineEdit添加clicked()事件.首先我们需要一个类,继承QLineEdit,我们定义为:mylineedit.那么分析下clicked()事件,这个事件是因为我们鼠标单击点击了下lineedit,然后触发的,那么正好,我们想到了在Qt有个mousePressEvent事件,于是我们可以重写mousePressEvent事件,然后触发自定义一个clicked()的信号,这样就可以实现点击lineedit就会发送一个clicked()的信号,代码如下:
mylineedit.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H
#include <QLineEdit>
#include <QMouseEvent>
class mylineedit : public QLineEdit
{
Q_OBJECT
public :
explicit mylineedit(QWidget *parent = 0);
protected :
//重写mousePressEvent事件
virtual void mousePressEvent(QMouseEvent *event);
signals:
//自定义clicked()信号,在mousePressEvent事件发生时触发
void clicked();
public slots:
};
#endif // MYLINEEDIT_H
|
mylineedit.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#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);
}
|
通过以上代码,我们的lineedit已经具有了发出clicked信号的能力,那么我们就可以把他做为一个组件放到QWidget或者其他容器里面,在QWidget类里面我们提供一个处理lineedit clicked信号的槽函数,然后在QWidget构造函数里面绑定lineedit clicked信号跟对应的处理函数,这样就可以达到我们想要的效果.
widget.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#ifndef WIDGET_H
#define WIDGET_H
# include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public :
explicit Widget(QWidget *parent = 0 );
~Widget();
private :
Ui::Widget *ui;
private slots:
//定义槽函数处理lineedit clicked
void handlelineeditclicked();
void handlelabelclicked();
};
#endif // WIDGET_H
|
widget.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#include "widget.h"
#include "ui_widget.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()));
connect(ui->label, SIGNAL(clicked()), this , SLOT(handlelabelclicked()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::handlelineeditclicked() {
//在处理lineedit clicked函数里我们将lineedit背景色变为红色
ui->lineEdit->setStyleSheet( "background-color:red" );
}
void Widget::handlelabelclicked() {
ui->label->setStyleSheet( "background-color:green" );
}
|
这样,我们的lineedit便具有了clicked的功能了.
main.cpp
1
2
3
4
5
6
7
8
9
10
11
|
#include <QtGui/QApplication>
#include "widget.h"
int main( int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
|
运行之后的效果就是点击lineedit,然后lineedit背景变为红色.同理,QLabel增加clicked功能也可以实现了.效果如下:
本人源代码下载:文件名:labellineeditclick.rar
http://sdrv.ms/TSVfls
Qt QLineEdit QLabel 添加clicked事件相关推荐
- Qt 给控件QLineEdit添加clicked事件方法
做Qt开发的会知道QLineEdit是默认没有clicked事件的,但是Qt有很好的一套信号/槽机制,而且Qt是基于C++面向对象的思想来设计的,那么我们就很容易通过自己定义一些类,重写QLineEd ...
- QT给文本添加链接事件
参考自: https://blog.csdn.net/humanking7/article/details/80685893 说明 Qt的文本窗体部件能够显示富文本,使用HTML4 标记.能够以这种方 ...
- QT:自定义QLabel实现点击事件
实现QLabel点击事件,及自定义对话框@TOC 实现QLabel点击事件 我们经常会遇到,点击QLabel弹出一个Dialog进行数据的更新,但是QT本身的QLabel没有clicked事件,这时需 ...
- Qt 实现QLabel的单击双击功能(一)
版本:Qt5.12.3 将来的Qt版本会不会支持QLabel鼠标点击事件不知道,此版本是不支持的,需要自己手动实现. (1)在项目中添加一个类,命名为QXHLabel,继承自QLabel. (2)在Q ...
- Pyqt学习笔记(1) ----- 创建按钮,并添加单击事件
Pyqt学习笔记(1) ----- 创建按钮,并添加单击事件 from PyQt5 import QtCore, QtGui, QtWidgets import sys from PyQt5.QtGu ...
- gtk_widget_add_events为某个构件添加一个事件
gtk_widget_add_events用来为某个构件添加一个事件.该函数用来说明哪一个构件将回接受到事件,并对事件的发生做出反应.一些事件使用时要已与特定的构件组装好了,另外的一些事件需要使用函数 ...
- Qt中鼠标的双击事件和单击事件的实现方式
背景 同一个部件既要响应鼠标单击事件又要响应双击事件,而且两者响应的动作没有交集,跟不存在包含关系(如果双击事件动作包含单击事件的动作,那么只需要将双击事件特有的部分放到mouseDoubleClic ...
- QT UI控件和事件
QT UI控件和事件 控件 自定义事件 事件 QEvent 鼠标事件 定时器 绘图事件 文件 控件 登录窗口布局 lable : 标签 (登录的用户名:) Line Edit : 单行的编辑框 (输入 ...
- Qt实现 QLabel显示文本与图片、动图
QLabel概念: 在Qt中,QLabel类用于文本或图片(包括动图gif).视频的显示,并不提供用户交互功能, 如果需要交互,比如响应鼠标事件,根据面向对象的里氏替换原则,子类必须能够替换它们的父类 ...
- Qt之QEvent(所有事件的翻译)
Qt之QEvent(所有事件的翻译) QEvent 类是所有事件类的基类,事件对象包含事件参数. Qt 的主事件循环(QCoreApplication::exec())从事件队列中获取本地窗口系统事件 ...
最新文章
- SharePoint 2007 Web Content Management 性能优化系列 前言
- Mysql数据库函数(数字,字符串,日期时间)
- 实现滚到div时淡入效果
- 从像素坐标到相机坐标_【视觉知识】机器视觉几何坐标概论
- linux内存锁定什么意思,Linux内存子系统——Locking Pages(内存锁定)
- ug断开视图断开线的距离_UG编程刀路优化技巧
- FeHelper下载:(Chrome浏览器)
- Css3中align-content,css align-content属性怎么用
- 智能仓储系统作业流程及价值
- php wamp一键环境包,phpwind本地环境一键安装包Wamp 5.0使用说明
- 银达汇智 智慧综合管理平台 FileDownLoad.aspx 任意文件读取漏洞
- 华为18级大牛倾情奉送:分布式服务框架和微服务设计原理实战文档,啃完发现涨薪如此简单
- 一文彻底学会CSS-3
- 【Unity】让动画系统支持相对坐标
- Wi-Fi 6 提升了哪些方面?
- [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
- 在 VMware vSphere 中构建 Kubernetes 存储环境
- 动态规划:什么是动态规划?
- Windows ❀ AD域服务器的搭建(LDAP协议)
- 最新最全论文合集——ISCA 历年最佳论文汇总
热门文章
- 使用阿里云Maven仓库
- 腾讯云买服务器密码,腾讯云服务器初始密码是什么?
- 使用win10远程控制ubuntu16.04
- 1818. 绝对差值和
- c语言链表课件,C语言链表详解ppt课件.ppt
- Invalid bound statement (not found): com.wu.dao.BlogMapper.addBook错误
- 图书条形码跟ISBN号互相转换的类 续
- CVPR 2021 Involution: Inverting the Inherence of Convolution for Visual Recognition
- 微信头像css 3圆形,如何在手机端用PICSART制作微信圆形头像(图文教程)
- 注册Google Pay企业开发者账号