您当前的位置: 首页 >  qt

wendy_ya

暂无认证

  • 0浏览

    0关注

    342博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Qt实战案例(21)——利用事件发送函数实现预定义键盘响应事件

wendy_ya 发布时间:2022-01-12 15:47:36 ,浏览量:0

目录
    • 一、事件发送函数介绍
      • 1.1 sendEvent()函数
      • 1.2 postEvent()函数
    • 二、项目介绍
    • 三、项目基本配置
    • 四、UI界面设计
    • 五、主程序实现
      • 5.1 widget.h头文件
      • 5.2 widget.cpp源文件
    • 六、效果演示

一、事件发送函数介绍 1.1 sendEvent()函数

阻塞型事件发送需要重写接收对象的event()事件处理函数,当事件发送后,将会立即进入event()事件处理函数进行事件处理,通过sendEvent()静态函数实现阻塞发送。

函数介绍: bool QCoreApplication::sendEvent(QObject *receiver, QEvent *event) 使用notify()函数将事件直接发送到接收方。返回从事件处理程序返回的值。

  • receiver:接收对象;
  • event:要发送的event类型(比如:鼠标双击)

发送事件后,不会删除该事件。例如,通常的方法是在堆栈上创建事件。

 QMouseEvent event(QEvent::MouseButtonPress, pos, 0, 0, 0);
 QApplication::sendEvent(mainWindow, &event);

sendEvent()函数是阻塞式的,所以支持栈空间/堆空间事件对象的发送(局部对象和new分配的对象),new分配的事件对象被处理后,会由Qt内部自动摧毁。

1.2 postEvent()函数

非阻塞型事件发送需要重写接收对象的event()事件处理函数,当事件发送后立即返回,事件将会发送到事件队列中等待处理,通过postEvent()静态函数实现非阻塞发送。

函数介绍: void QCoreApplication::postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority)

将对象接收方作为事件接收方的事件添加到事件队列并立即返回。 必须在堆上分配该事件,因为post事件队列将获得该事件的所有权,并在发布后将其删除。发布事件后访问该事件是不安全的。 当控件返回到主事件循环时,将使用notify()函数发送队列中存储的所有事件。

postEvent()函数是非阻塞式的,所以只能支持栈堆空间事件对象的发送(new分配的对象),new分配的事件对象被处理后,会由Qt内部自动摧毁。

二、项目介绍

利用sendEvent()事件发送函数发送预定义的键盘Delete按键事件。

三、项目基本配置

新建一个Qt案例,项目名称为“sendEvent”,基类选择“QWidget”,创建UI界面复选框的选中状态,完成项目创建。

四、UI界面设计

UI界面如下: 在这里插入图片描述 界面中创建了2个控件,其名称和类型如下表所示:

序号名称类型属性①editQTextEdit\②DeleteBtnQPushButton\ 五、主程序实现 5.1 widget.h头文件

头文件中需要声明一个按钮点击槽函数:

private slots:
    void on_DeleteBtn_clicked();
5.2 widget.cpp源文件

定义按钮点击槽函数:

//按钮点击槽函数
void Widget::on_DeleteBtn_clicked()
{
    int  key = Qt::Key_Delete ;   //定义删除按键

    QKeyEvent EventPress(QEvent::KeyPress,key,Qt::NoModifier);//构建KeyEvent对象
    QApplication::sendEvent(ui->edit,&EventPress);   //发送键盘按下事件

    QKeyEvent EventRelease(QEvent::KeyRelease,key,Qt::NoModifier);
    QApplication::sendEvent(ui->edit,&EventRelease); //发送键盘松开事件
}
六、效果演示

完整效果如下: 在这里插入图片描述

如果没有看懂的话,完整代码可以参考:https://download.csdn.net/download/didi_ya/75530624

ok,以上便是文章的全部内容了,如果对你有所帮助,记得点个赞哟~

关注
打赏
1659256378
查看更多评论
立即登录/注册

微信扫码登录

0.0367s