Qt43 发送自定义事件(一)

学习自唐佐林老师的Qt


在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
实验1:发送自定义事件

Widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui/QWidget>
#include <QPushButton>
class Widget : public QWidget
{
    Q_OBJECT
    
    QPushButton m_pushButton;
    void testSendEvent();
    void testPostEvent();
protected slots:
    void onButtonClicked();
public:
    Widget(QWidget *parent = 0);
    bool event(QEvent* evt);//重写事件处理函数
    ~Widget();
};
#endif // WIDGET_H

Widget.cpp

#include "Widget.h"
#include <QMouseEvent>
#include <QApplication>
#include <QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    m_pushButton.setParent(this);//指定父组件
    m_pushButton.setText("Test");
    connect(&m_pushButton, SIGNAL(clicked()), this, SLOT(onButtonClicked()));
}
void Widget::onButtonClicked()
{
    // testSendEvent();
    testPostEvent();
}
//阻塞式 事件发送函数sendEvent()
void Widget::testSendEvent()
{
    //定义鼠标双击事件对象
    /*参数:事件类型,鼠标双击事件
           双击坐标点
           指明是鼠标左键还是右键双击
           在双击时没有按键盘上面的任意按键
    */
    QMouseEvent dbcEvt(QEvent::MouseButtonDblClick, QPoint(0, 0), Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
    qDebug() << "Before sendEvent()";
    //给当前 Widget对象窗口发送一个鼠标双击事件,
    QApplication::sendEvent(this, &dbcEvt);
    qDebug() << "After sendEvent()";
}
//非阻塞式 事件发送函数 postEvent()
void Widget::testPostEvent()
{
    //postEvent()事件发送函数中国发送的事件 必须是堆空间上面的事件对象
    QMouseEvent* dbcEvt = new QMouseEvent(QEvent::MouseButtonDblClick, QPoint(0, 0), Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
    qDebug() << "Before postEvent()";
    //必须使用堆空间上面的事件对象调用 postEvent()事件发送函数
    //给当前 Widget对象窗口发送一个鼠标双击事件,
    QApplication::postEvent(this, dbcEvt);
    qDebug() << "After postEvent()";
}
//当前窗口对象的事件处理函数
bool Widget::event(QEvent* evt)
{
    //判断事件类型是否是 鼠标双击事件
    if( evt->type() == QEvent::MouseButtonDblClick )
    {
        qDebug() << "event(): " << evt;
    }
    return QWidget::event(evt);//调用父类事件处理函数
}
Widget::~Widget()
{
    
}

main.cpp

#include <QtGui/QApplication>
#include "Widget.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    
    return a.exec();
}

猜你喜欢

转载自blog.csdn.net/LinuxArmbiggod/article/details/115697610