做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事件相关推荐

  1. Qt 给控件QLineEdit添加clicked事件方法

    做Qt开发的会知道QLineEdit是默认没有clicked事件的,但是Qt有很好的一套信号/槽机制,而且Qt是基于C++面向对象的思想来设计的,那么我们就很容易通过自己定义一些类,重写QLineEd ...

  2. QT给文本添加链接事件

    参考自: https://blog.csdn.net/humanking7/article/details/80685893 说明 Qt的文本窗体部件能够显示富文本,使用HTML4 标记.能够以这种方 ...

  3. QT:自定义QLabel实现点击事件

    实现QLabel点击事件,及自定义对话框@TOC 实现QLabel点击事件 我们经常会遇到,点击QLabel弹出一个Dialog进行数据的更新,但是QT本身的QLabel没有clicked事件,这时需 ...

  4. Qt 实现QLabel的单击双击功能(一)

    版本:Qt5.12.3 将来的Qt版本会不会支持QLabel鼠标点击事件不知道,此版本是不支持的,需要自己手动实现. (1)在项目中添加一个类,命名为QXHLabel,继承自QLabel. (2)在Q ...

  5. Pyqt学习笔记(1) ----- 创建按钮,并添加单击事件

    Pyqt学习笔记(1) ----- 创建按钮,并添加单击事件 from PyQt5 import QtCore, QtGui, QtWidgets import sys from PyQt5.QtGu ...

  6. gtk_widget_add_events为某个构件添加一个事件

    gtk_widget_add_events用来为某个构件添加一个事件.该函数用来说明哪一个构件将回接受到事件,并对事件的发生做出反应.一些事件使用时要已与特定的构件组装好了,另外的一些事件需要使用函数 ...

  7. Qt中鼠标的双击事件和单击事件的实现方式

    背景 同一个部件既要响应鼠标单击事件又要响应双击事件,而且两者响应的动作没有交集,跟不存在包含关系(如果双击事件动作包含单击事件的动作,那么只需要将双击事件特有的部分放到mouseDoubleClic ...

  8. QT UI控件和事件

    QT UI控件和事件 控件 自定义事件 事件 QEvent 鼠标事件 定时器 绘图事件 文件 控件 登录窗口布局 lable : 标签 (登录的用户名:) Line Edit : 单行的编辑框 (输入 ...

  9. Qt实现 QLabel显示文本与图片、动图

    QLabel概念: 在Qt中,QLabel类用于文本或图片(包括动图gif).视频的显示,并不提供用户交互功能, 如果需要交互,比如响应鼠标事件,根据面向对象的里氏替换原则,子类必须能够替换它们的父类 ...

  10. Qt之QEvent(所有事件的翻译)

    Qt之QEvent(所有事件的翻译) QEvent 类是所有事件类的基类,事件对象包含事件参数. Qt 的主事件循环(QCoreApplication::exec())从事件队列中获取本地窗口系统事件 ...

最新文章

  1. SharePoint 2007 Web Content Management 性能优化系列 前言
  2. Mysql数据库函数(数字,字符串,日期时间)
  3. 实现滚到div时淡入效果
  4. 从像素坐标到相机坐标_【视觉知识】机器视觉几何坐标概论
  5. linux内存锁定什么意思,Linux内存子系统——Locking Pages(内存锁定)
  6. ug断开视图断开线的距离_UG编程刀路优化技巧
  7. FeHelper下载:(Chrome浏览器)
  8. Css3中align-content,css align-content属性怎么用
  9. 智能仓储系统作业流程及价值
  10. php wamp一键环境包,phpwind本地环境一键安装包Wamp 5.0使用说明
  11. 银达汇智 智慧综合管理平台 FileDownLoad.aspx 任意文件读取漏洞
  12. 华为18级大牛倾情奉送:分布式服务框架和微服务设计原理实战文档,啃完发现涨薪如此简单
  13. 一文彻底学会CSS-3
  14. 【Unity】让动画系统支持相对坐标
  15. Wi-Fi 6 提升了哪些方面?
  16. [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  17. 在 VMware vSphere 中构建 Kubernetes 存储环境
  18. 动态规划:什么是动态规划?
  19. Windows ❀ AD域服务器的搭建(LDAP协议)
  20. 最新最全论文合集——ISCA 历年最佳论文汇总

热门文章

  1. 使用阿里云Maven仓库
  2. 腾讯云买服务器密码,腾讯云服务器初始密码是什么?
  3. 使用win10远程控制ubuntu16.04
  4. 1818. 绝对差值和
  5. c语言链表课件,C语言链表详解ppt课件.ppt
  6. Invalid bound statement (not found): com.wu.dao.BlogMapper.addBook错误
  7. 图书条形码跟ISBN号互相转换的类 续
  8. CVPR 2021 Involution: Inverting the Inherence of Convolution for Visual Recognition
  9. 微信头像css 3圆形,如何在手机端用PICSART制作微信圆形头像(图文教程)
  10. 注册Google Pay企业开发者账号