Qt模态对话框与按键控制焦点的问题

在Qt应用中,使用自定义按键事件控制焦点移动时遇到问题:当从主界面按键弹出模态对话框后,焦点应位于对话框内,但按键事件却导致对话框关闭并返回主界面。尝试检查焦点状态和防止内存泄漏,如添加Qt::WA_DeleteOnClose属性,但这仅解决了部分问题。若对话框按钮响应时间较长,重复按键会导致界面卡死,疑似由多个未关闭的模态框叠加引起。作者寻求解决该问题的方法。
摘要由CSDN通过智能技术生成

操作均为自定义的按键事件控制焦点移动,在主界面将焦点移动到一个按钮上,通过按键事件,响应点击事件。在点击事件中执行弹出模态对话框,此时焦点应该在模态对话框的按钮上来,但点击按键事件,模态框关闭,主界面程序在执行ui->typeCombo->setFocus();后,自己又进行了一次“eventType_JOYSITCK_ENTER”事件。
之前做过很多尝试,首先考虑到主界面焦点是否依然存在,导致在模态对话框下焦点依然存在,对话框也只是阻塞了按下操作,在关闭后才执行。但后来发现,如果主界面的按钮是用鼠标点击的话,无论焦点是否是通过按键移动到此按钮,再使用按键操作对话框的按钮,就不会出现上述问题,而按键按下直接响应的也是按钮按下函数,就很迷茫。
在无措的时候,发现说这样编程可能造成内存泄漏,要加上this->setAttribute (Qt::WA_DeleteOnClose);后,只有第一次出现问题。但是有发现另一个问题就是如果在模态框中按钮按下需要时间相应的话,多次按下按钮界面会卡死。应该为弹出多个模态框叠加导致第一次对话框焦点遗失造成的吧。真的很迷了。。本人刚接触Qt没多久真的很迷茫,这个问题也纠结两天了,谢谢大家的帮助
对话框代码如下:

  #include "messagebox.h"
    #include "ui_messagebox.h"
    
    #include <QDialog>
    #include <QPainter>
    #include <QCloseEvent>
    #include <QDebug>
    
    bool messageBox::isTrue = false;
    
    messageBox::messageBox(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::messageBox)
    {
        ui->setupUi(this);
        this->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
          this->setWindowModality(Qt::ApplicationModal);
    //    this->setAttribute (Qt::WA_DeleteOnClose);
        //register eventFilter
        qApp->installEventFilter(this);
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值