我是靠谱客的博主 包容皮卡丘,最近开发中收集的这篇文章主要介绍如何使用自定义的QEvent事件如何使用自定义的QEvent事件,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

如何使用自定义的QEvent事件

自定义事件对于特定的操作是很有用的

MyQEvent.h

#ifndef MYQEVENT_H
#define MYQEVENT_H

#include <QEvent>

class MyQEvent : public QEvent
{
public:
    MyQEvent();
    MyQEvent(QEvent::Type MyType);

    static const QEvent::Type MyType_10MousePress;       //点击鼠标10次事件
    static const QEvent::Type MyType_Test;                    //重新定义的测试事件
};

#endif // MYQEVENT_H

MyQEvent.cpp

#include "MyQEvent.h"
#include <QDebug>

const QEvent::Type MyQEvent::MyType_Test = static_cast<QEvent::Type>(QEvent::User+906);
const QEvent::Type MyQEvent::MyType_10MousePress = (QEvent::Type)QEvent::registerEventType(QEvent::User+851);

MyQEvent::MyQEvent() : QEvent(MyQEvent::MyType_Test)
{
    qDebug()<<"MyType 1 = "<<MyQEvent::MyType_Test;
}

MyQEvent::MyQEvent(QEvent::Type MyType) : QEvent(MyType)
{
    qDebug()<<"MyType 2 = "<<MyType;
}

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

    void customEvent(QEvent* event);
    bool event(QEvent* event);
    bool eventFilter(QObject *watched, QEvent *event);

    int nCount;

};

#endif // MAINWINDOW_H

MainWindow.cpp

#include "MainWindow.h"
#include "ui_MainWindow.h"
#include "MyQEvent.h"
#include <QDebug>

/*!
 * brief 两种方式触发两个自定义的测试事件
 * QApplication::postEvent(this,new MyQEvent());
 * QApplication::postEvent(this,new MyQEvent(MyQEvent::MyType_Test));
 * brief 鼠标点击10次,触发一个自定义的鼠标点击10次事件
 *  MyQEvent oMyEvent(MyQEvent::MyType_10MousePress); QApplication::sendEvent(ui->lineEdit,&oMyEvent);
 * param parent
 */

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    nCount = 0;
    QApplication::postEvent(this,new MyQEvent());
    QApplication::postEvent(this,new MyQEvent(MyQEvent::MyType_Test));
    ui->lineEdit->installEventFilter(this);
}

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

void MainWindow::customEvent(QEvent *event)     //只能处理自定义事件
{
    if(event->type() == MyQEvent::MyType_Test)
    {
        qDebug()<<"Recevie Event From <postEvent> in customEvent";
    }
    QMainWindow::customEvent(event);     //这是将非指定的事件类型返回给父类,保证其他功能正常使用
}

bool MainWindow::event(QEvent *event)      //自定义事件或者QEvent以定义好的事件都可以处理
{
    if(event->type() == MyQEvent::MyType_Test)
    {
        qDebug()<<"Recevie Event From <postEvent> in event";
    }
    if(event->type() == QEvent::MouseButtonPress)
    {
        nCount++;
        qDebug()<<"nCount = "<<nCount;
        if(nCount == 10)
        {
            nCount = 0;
            MyQEvent oMyEvent(MyQEvent::MyType_10MousePress);
            QApplication::sendEvent(ui->lineEdit,&oMyEvent);
        }
    }
    QMainWindow::event(event);     //这是将非指定的事件类型返回给父类,保证其他功能正常使用
    return true;
}

bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
    if(watched == ui->lineEdit && event->type() ==MyQEvent::MyType_10MousePress )
    {
        ui->lineEdit->setText("HelloWorld!");
        return true;
    }
    return QMainWindow::eventFilter(watched,event);
}

最后

以上就是包容皮卡丘为你收集整理的如何使用自定义的QEvent事件如何使用自定义的QEvent事件的全部内容,希望文章能够帮你解决如何使用自定义的QEvent事件如何使用自定义的QEvent事件所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部