一 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界面或者代码中这样设置