概述
如何使用自定义的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事件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复