做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 = );
protected:
//重写mousePressEvent事件
virtual void mousePressEvent(QMouseEvent *event); signals:
//自定义clicked()信号,在mousePressEvent事件发生时触发
void clicked(); public slots:
}; #endif // MYLINEEDIT_H

mylineedit.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_OBJECT public:
explicit Widget(QWidget *parent = );
~Widget(); private:
Ui::Widget *ui; private slots:
//定义槽函数处理lineedit clicked
void handlelineeditclicked(); }; #endif // WIDGET_H

widget.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背景变为红色.效果如下:

注:此文章参考网上,结合本人实际实现的效果。

Qt 给控件QLineEdit添加clicked事件方法的更多相关文章

  1. C# 如何正确删除控件已添加的事件

    方法一:在相对应里窗体下面有个 "窗体.Designer.cs"文件,双击打开,找到相关事件,删除就行. 方法二:找到构造函数,“InitializeComponent()”对着它 ...

  2. Qt QToolTip 控件背景的 QSS 设置方法(摘抄)

    Qt/C++/CSS: QTooltip stylesheet background colour Hi there, I've recently come across a problem deve ...

  3. Qt常用控件

    Qt常用控件 QWidget与QFrame QWidget所有图形控件的基类 QFrame与QWidget的区别 QFrame是基本控件的基类, QWidget是QFrame的基类. 因此QFrame ...

  4. Qt基本控件及三大布局

    Qt基本控件及三大布局 来源: http://blog.csdn.net/a2604539133/article/details/73920696 Qt基本模块 一.Qt的三大布局 QHBoxLayo ...

  5. Qt入门(4)——Qt常见控件

    Qt提供了大量的内建控件及通用对话框可满足程序员的绝大部分要求.我们将对这些控件和对话框作一个大概的介绍. 1. QLabel 定义 QLabel* m_labelOrdered = newQLabe ...

  6. QT常用控件(三)——自定义控件封装

    引言 Qt已经提供了很多的基础控件供开发使用,而Qt原生的控件有时候并不能满足我们的需求,特别是在工业的运用上,比如我们需要一个日期时间的选择器,Qt虽然已经提供了原生的QDateTime控件,但这个 ...

  7. Qt报表控件NCReport教程:报表创建示例

    NCReport是 一款10多年时间的老牌报表控件,最初是在2002年时作为qt3的应用程序的一个联合项目,后来就成为了一个独立的GPL项目.现在的NCReport 是一款轻量级.快速.多平台.简单易 ...

  8. Android监听Button和ImageButton控件的点击事件

    一.onClick事件 Button和ImageButton都有一个onClick事件,通过自身的.setOnClickListener(OnClickListener)方法添加点击事件 所有的控件都 ...

  9. C# DataGridView控件 动态添加新行

    DataGridView控件在实际应用中非常实用,特别需要表格显示数据时.可以静态绑定数据源,这样就自动为DataGridView控件添加相应的行.假如需要动态为DataGridView控件添加新行, ...

随机推荐

  1. Linux 搭建Nginx+uWSGI+Django环境

    安装环境 sudo apt-get install nginx sudo apt install python3 sudo apt install python3-pip 使用 sudo pip3 i ...

  2. Katalon Studio之请求响应中文乱码解决方法

    最近在用Katalon做接口测试过程中发现请求响应消息中返回的中文均为乱码,这是因为我们使用的系统环境在初始安装时选择的中文简体,导致windows系统默认编码格式为GBK,但是KS的编码格式是UTF ...

  3. python语法_模块_re(正则表达)

    字符串操作方法有: s = 'hello word' s.find('l') 查询第一个l的索引 s.replace('ll','xx') 替换 s.split('w') 以w进行分割 这些都是完全匹 ...

  4. CESSNA: Resilient Edge-Computing

    CESSNA: 弹性边缘计算 本文为SIGCOMM 2018 Workshop (Mobile Edge Communications, MECOMM)论文. 笔者翻译了该论文.由于时间仓促,且笔者英 ...

  5. [转]jenkins2 插件安装

    文章来自:http://www.ciandcd.com 文中的代码来自可以从github下载: https://github.com/ciandcd Jenkins的安装包和插件在7个国家有20多个镜 ...

  6. libguestfs手册(2):guestfish command

    添加一个drive:guestfs_add_drive_opts add-drive filename [readonly:true|false] [format:..] [iface:..] [na ...

  7. 解决 spring-cloud-starter-zipkin 启动错误

    应用场景:Spring Boot 服务添加 Zipkin 依赖,进行服务调用的数据采集,然后进行 Zipkin-Server 服务调用追踪显示. 示例pom.xml配置: <parent> ...

  8. [Swift]LeetCode170.两数之和III - 数据结构设计 $ Two Sum III - Data structure design

    Design and implement a TwoSum class. It should support the following operations:add and find. add - ...

  9. [Swift]LeetCode476. 数字的补数 | Number Complement

    Given a positive integer, output its complement number. The complement strategy is to flip the bits ...

  10. [Swift]LeetCode995. K 连续位的最小翻转次数 | Minimum Number of K Consecutive Bit Flips

    In an array A containing only 0s and 1s, a K-bit flip consists of choosing a (contiguous) subarray o ...