文档章节

Qt中事件的传递

sun_beauty
 sun_beauty
发布于 2013/05/06 22:58
字数 297
阅读 805
收藏 3
  • 新建Qt Gui项目,基类选择QWidget
  • 添加新文件,基于C++类,类名MyLineEdit
  • mylineedit.h中代码:
  • #ifndef MYLINEEDIT_H
    #define MYLINEEDIT_H

    #include <QLineEdit>

    class MyLineEdit : public QLineEdit
    {
        Q_OBJECT
    public:
        explicit MyLineEdit(QWidget *parent = 0);
        bool event(QEvent *event);
        
    signals:
        
    public slots:
    protected:
        void keyPressEvent(QKeyEvent *event);
        
    };
    //void MyLineEdit::keyPressEvent()

    #endif // MYLINEEDIT_H


  • mylineedit.cpp中代码:
#include "mylineedit.h"
#include <QDebug>
#include <QKeyEvent>

MyLineEdit::MyLineEdit(QWidget *parent) :
    QLineEdit(parent)
{
}

void MyLineEdit::keyPressEvent(QKeyEvent *event)
{
    //qDebug()<<tr("MyLineEdit键盘按下事件");
    QLineEdit::keyPressEvent(event);
    event->ignore();
}
bool MyLineEdit::event(QEvent *event)
{
    if(event->type()==QEvent::KeyPress)
        qDebug()<<tr("MyLineEdit的event函数");
    return QLineEdit::event(event);
}

  • widget.h中代码:
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class MyLineEdit;
namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT
    
public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
    bool eventFilter(QObject *obj,QEvent *event);

protected:
    void keyPressEvent(QKeyEvent *event);
    
private:
    Ui::Widget *ui;
    MyLineEdit *lineEdit;
};

#endif // WIDGET_H

  • widget.cpp中代码:
#include "widget.h"
#include "ui_widget.h"
#include "mylineedit.h"
#include <QKeyEvent>
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    lineEdit=new MyLineEdit(this);
    lineEdit->move(100,100);
    lineEdit->installEventFilter(this);//在widget上为lineEdit安装事件过滤器

}
void Widget::keyPressEvent(QKeyEvent *event)
{
    qDebug()<<tr("Widget键盘按下事件");
}

bool Widget::eventFilter(QObject *obj,QEvent *event)
{
    if(obj==lineEdit)
        {
        if(event->type()==QEvent::KeyPress)
           qDebug()<<tr("widget的事件过滤器");
    }
    return QWidget::eventFilter(obj,event);
}
Widget::~Widget()
{
    delete ui;
}


  • main.cpp中代码:
#include <QtGui/QApplication>
#include "widget.h"
#include <QTextCodec>

int main(int argc, char *argv[])
{
    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    QApplication a(argc, argv);
    Widget w;
    w.show();    
    return a.exec();
}


© 著作权归作者所有

上一篇: vim使用技巧
下一篇: 二维向量
sun_beauty
粉丝 8
博文 20
码字总数 7556
作品 0
通州
私信 提问
Qt事件处理(四)——重写event()函数

目录 前言 根据视频看的事件处理,但是没有顺序,所以有点乱!不过理解起来也不麻烦!学习!分享!感谢! Qt的事件分发过程 在的事件循环中,会不断判断事件的产生,然后把产生的事件分派给对...

simonforfuture
2017/12/09
0
0
QT5:事件接受与忽略.

让我们首先来看一个例子: //CustomButton.h include <QWidget> include <QPushButton> include <QDebug> class CustomButton : public QPushButton { Q_OBJECT public: CustomButton(QWidget......

SHIHUAMarryMe
2016/04/02
187
0
事件Qevent的接受和忽略 和重定义 事件过滤器

事件处理流程: 某个事件发生------>exec()循环会接收到这个事件------> 创建一个事件对象,并将对象传递给QObject::event()------> 在QWidget::event()函数中,分配给特定的事件处理函数---...

晨曦之光
2012/04/13
157
0
Qt Event Dispatcher学习

距离上次整理Qt事件系统已经过了14个月了。重新理理思绪: Qt中的事件大致可分为3类: Spontaneous events 从系统得到的消息:鼠标按键、键盘按键、定时器事件等。转化为QEvent后被Qt事件系统...

晨曦之光
2012/05/08
1K
0
【转】QT事件传递与事件过滤器

【概览】 1、重载特定事件函数。 比如: mousePressEvent(),keyPressEvent(), paintEvent() 。 2、重新实现QObject::event()。 这一般用在Qt没有提供该事件的处理函数时。也就是,我们增加...

罗兵
2015/02/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
今天
5
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
今天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
今天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
今天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部