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();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux老A

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值