今天发现一个以前都没注意过的问题,起因是我实现了按回车键调用一些函数,然后每次回车的时候发现都有一个不应该被调用的方法被调用,最后发现原来是这个按钮被默认选中了,每次回车的时候都会调用与其关联的槽函数。。
Qt文档里对 QPushButton 的 autoDefault 属性是这么描述的:
This property holds whether the push button is an auto default button If this property is set to true then the push button is an auto default button. In some GUI styles a default button is drawn with an extra frame around it, up to 3 pixels or more. Qt automatically keeps this space free around auto-default buttons, i.e., auto-default buttons may have a slightly larger size hint. This property's default is true for buttons that have a QDialog parent; otherwise it defaults to false.
而且 QDialog 会找到第一个能被 focus 的widget,并 focus 它,其实仔细观察能发现界面里会有一个边框蓝色的被选中的按钮(如果是默认样式的话)。。以后多看官方文档。。
对于这个问题,如果你不想选中默认选中的那个按钮,你可以 focus 一个别的按钮,或者 setAutoDefault() 为false 。但在 QDialog 里他肯定会focus一个,你如果把这个按钮 setAutoDefault``(false) 了,他还会再找到下一个按钮去 focus 它,所以我还是用了 setFocus() 去指定这个默认被选中的按钮。
// 代码片段
// 方法一
ui->pushButton1->setAutoDefault(false); // 默认是true的
// 设置为false后这个按钮不会被选中
// 但会选中下一个能选中的按钮
// 方法二
ui->pushButtonYouWant->setFocus(); // 这个按钮会被选中