Qt事件处理(二)——事件处理链

本文探讨了Qt中的事件处理链,解释了如何在父子控件间传递和处理事件。作者通过实例代码展示了如何在子窗口中处理鼠标事件,并利用和函数控制事件的传递。此外,还提到了关闭窗口时的确认对话框,涉及了事件处理和窗口交互的基本概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言

最近遇到 一个问题,想要在QLabel上显示图像的同时,用鼠标选定特定目标并画矩形圈出物体。但是显示图像之后,画的矩形是在widget窗口下,而不是在QLabel上。后来全都在QLabel中处理,但是出现另外一个问题,就是我在子窗口中画矩形成功,显示矩形也是成功的,但是鼠标的坐标不正确,这时候因为我是在子对象中对鼠标事件进行处理,然后无法进行坐标设置。还是对Qt的事件处理不是很了解。感觉这篇博客有希望解决。
学习!分享!感谢!

事件处理链

原理描述

控件之间如果具有父子关系,如果子对象不对事件进行处理,可以选择传递给父对象进行处理。如果父对象不处理,可以传递给父对象的父对象进行处理。但是我们需要对对应的控件进行继承,这样我们才能重写对应的事件处理函数,然后用我们自己的方式对事件进行处理。

ignore()accept()

Qt中我们对事件可以选择忽略或者处理,默认情况是处理的。我们可以选择对事件进行处理,然后调用event->ignore()函数,这样表示我们对事件的处理选择忽略。但是在忽略之前,我们还是可以进行一些处理内容。然后在忽略之后,事件就会传递到控件的父对象,这样父对象就能再次对发生的事件进行处理。
注意:必须继承控件,然后重写父控件中的事件处理函数

代码

  • main.cpp
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}
  • mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtWidgets>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值