QT中自定义事件

本程序代码为界面UI应用程序:参考 :
http://devbean.blog.51cto.com/448512/232314/

http://cool.worm.blog.163.com/blog/static/6433900620084632410879/

下面为代码:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QEvent>
//#define ORI_DIS_EVENT QEvent::User+12

namespace Ui {
class MainWindow;
}

class QOriCodeEvent : public QEvent
{
public:
    QOriCodeEvent();
public:
    QString smyData;
    int m_len;
    char m_data[255];
};

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

    void customEvent( QEvent *event );
    bool event(QEvent *event) ;

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
//extern int ORI_DIS_EVENT;

int ORI_DIS_EVENT=0;
//! 来源于 http://cool.worm.blog.163.com/blog/static/6433900620084632410879/
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ORI_DIS_EVENT = QEvent::registerEventType(  );
    //int i1 = QEvent::registerEventType(  );
    //int i2 = QEvent::registerEventType(  );
    //qDebug()<<"ORI_DIS_EVENT"<<ORI_DIS_EVENT<<i1<<i2;//65535 65534 65533
}

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

QOriCodeEvent::QOriCodeEvent()
    : QEvent( Type(ORI_DIS_EVENT) )
{
    //实现比较简单,随机获得指定长度的源码
    m_len = rand()%150 + 50;
    //0xeb 0x90 表示起始头,其他数据随机产生的。
    m_data[0] = 235;
    m_data[1] = 144;
    for (int i = 2; i < m_len; i++)
        m_data[i] = rand()%255;
}

void MainWindow::on_pushButton_clicked()
{
    QOriCodeEvent *event = new QOriCodeEvent();
    event->smyData="xxxxxxyyyy";
    qApp->postEvent(this, event);//! 投递消息  sendEvent QApplication::postEvent(object, new MyEvent(QEvent::registerEventType(2048)));
}
//! customEvent event 这2种方式处理事件都OK
void MainWindow::customEvent(QEvent *event)
{
    int type = event->type();
    if ( type == ORI_DIS_EVENT )
    {
        QString sout=((QOriCodeEvent*)event)->smyData;
        qDebug()<<sout;
        event->accept();
    }
}
//! 和上面的处理方式2选1
bool MainWindow::event(QEvent *event)
{
    if (event->type() == ORI_DIS_EVENT)
    {
        QOriCodeEvent *myEvent = static_cast<QOriCodeEvent *>(event);
        QString sout=((QOriCodeEvent*)event)->smyData;
        qDebug()<<sout;
        return true;
    }
    return QMainWindow::event(event);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值