ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Qt中的事件学习

2021-10-13 16:04:00  阅读:165  来源: 互联网

标签:Widget Qt parent MyLineEdit 学习 事件 QWidget include


QT中的事件
事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。
事件是先传递给指定窗口部件的,确切地说应该是先传递给获得焦点的窗口部件。如果该部件忽略掉该事件,那么这个事件就会传递给这个部件的父部件。重新实现事件处理函数时,一般要调用父类的相应事件处理函数来事件默认操作。
代码
mylineedit.h

#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H
#include <QLineEdit>

class MyLineEdit : public QLineEdit
{
    Q_OBJECT
public:
    MyLineEdit(QWidget *parent = 0);
protected:
    void keyPressEvent(QKeyEvent *event);
};

#endif // MYLINEEDIT_H

mylineedit.cpp

#include "mylineedit.h"
#include <QKeyEvent>
#include <QDebug>

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

}

void MyLineEdit::keyPressEvent(QKeyEvent *event) // 键盘按下事件
{
    qDebug()<<QString::fromUtf8("MyLineEdit键盘按下事件");
    QLineEdit::keyPressEvent(event);
    event->ignore(); // 忽略该事件 ignore()要在最后调用
    // 不忽略该事件执行结果:打印"MyLineEdit键盘按下事件" 忽略该事件执行结果:打印"MyLineEdit键盘按下事件"、Widget键盘事件按下
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class MyLineEdit;

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
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)
{
    lineEdit = new MyLineEdit(this);
    lineEdit->move(100, 100);
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

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

main.cpp

#include "widget.h"

#include <QApplication>

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

 

标签:Widget,Qt,parent,MyLineEdit,学习,事件,QWidget,include
来源: https://www.cnblogs.com/zhuyuantan/p/15402630.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有