QT常见问题和BUG解决

一 IDE

<1> 如果电脑上安装了两个不同版本的QTCreator比如qt6.6.x的IDE版本是QTCreator12.x 而qt5.12.x的IDE版本是QTCreator4.10.x,这时候在高版本的qtCreator上同时配置两个版本的qt后,有可能会导致IDE一直打不开,这时候只需要删除C:\Users\18071\AppData\Roaming\QtProject\QtCreator.ini配置文件就可以

<2> 如果只有一个IDE出现这种情况,首先优先排除软件抢占进程的问题,再考虑删除配置文件,比如网易有道词典就有可能导致这种情况.

二 事件记录

2.1 模态对话框的嵌套问题

当我要再一个主窗口A 上面 弹出一个模态对话框B的时候,然后在B这个模态对话框中还有一系列的处理流程,比如需要弹出一个模态对话框C的时候,这时候需要注意的是,因为是在第二个对话框B内部完成的后续处理,而这个B已经是模态对话框了,此时有这样一个需求。需要隐藏模态对话框B,等待C模态对话框退出后再显示B模态对话框,有这么两种情况.

  • 值得注意的是不能使用hide(),setVistable(true/false) 等方法来使B对话框不可见
  • 因为B对话框是模态弹出的,你使用这种方法隐藏掉它,这个按理来说C的事件循环结束是可以立即交付给B的,但多次测试发现并不行。
  • 这种操作本身就是不否和模态对话框的设计的,所以最好是在A窗口中利用信号槽来处理BC窗口之间的问题,当然下面这种方法也能解决。

正常情况下

QSize size = this->size(); // 获取模态对话框B的原始大小
resize(0,0); // 将大小设置为0  也可以使用 setFixSize(); setGemotry(); 等重置大小的方法
B.exec();  // 进入C模态对话框的事件循环机制
resize(size);

模态对话框B,有着系列的布局,或者某些按钮有最小化设置

  • 这将会导致上面设置大小方式不可取,所以需要下面这种方式
setEnabled(false);
lower();  
B.exec();
raise();
setEnabled(true);}

2.2 快捷键与键盘事件的冲突

  • 如果在qt界面或者别的地方设置了快捷键,那么会导致,键盘按键事件中对应的键值不会触发,就像下面的代码中处理键盘按下1时打印"The program is executed here"这段话,并且关闭这个窗口,但是再ui中给一个QPushbutton设置了快捷键也是1,所以就导致如果按下1,窗口并不会捕获到这个事件,而是被QPushbutton捕获,并且它捕获后由于设置的是快捷键,也可以触发点击按钮的事件,在某些场景下这种操作是更加方法快捷的。
void keyPressEvent(QKeyEvent *event)
{
    if(event->key() == Qt::Key_1)
    {
        qDebug()<<"The program is executed here";
        accept();
        return;
    }
}
  • 然后再ui界面或者代码中这样设置

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值