如何更改 QDialog 中的默认按钮行为

Posted

技术标签:

【中文标题】如何更改 QDialog 中的默认按钮行为【英文标题】:How to change the default button behaviour in a QDialog 【发布时间】:2018-05-09 09:33:51 【问题描述】:

我读到QDialog 将其所有对象都设置为默认值。例如,如果我添加一个QPushButton:

pushButton.setDefault(True)   
pushButton.setAutoDefaul(True)

我知道我可以将每个对象都设置为False,但是有没有办法避免QDialog 将其所有对象都设置为默认值?

【问题讨论】:

【参考方案1】:

实际上,将所有按钮的默认值设置为False不会有任何影响。如果没有将按钮设置为默认值,则对话框将只是 choose one automatically - 因此,无论您做什么,始终都是默认值。

您可以通过覆盖对话框的keyPressEvent 来更改此行为:

class Dialog(QtWidgets.QDialog):
    def keyPressEvent(self, event):
        if ((not event.modifiers() and
             event.key() == QtCore.Qt.Key_Return) or
            (event.modifiers() == QtCore.Qt.KeypadModifier and
             event.key() == QtCore.Qt.Key_Enter)):
            event.accept()
        else:
            super(Dialog, self).keyPressEvent(event)

但是,您应该注意,当按钮获得焦点时按 enter 或 return 仍会正常激活它。默认按钮机制仅在其他一些小部件具有焦点但不吞下按键事件(例如,在行编辑中按返回)时发挥作用。

【讨论】:

以上是关于如何更改 QDialog 中的默认按钮行为的主要内容,如果未能解决你的问题,请参考以下文章

Vue:如何在按住键盘修饰符时更改按钮的文本?

更改 Perl 中的默认正则表达式行为?

如何将 Qdialog 中的信号连接到 QMainwindow 中的插槽

如何从QDialog刷新/更新/重绘QMainWindow?

如何更改 Swift 中表格视图单元格中的默认删除按钮?

QT 设置QDialog显示与隐藏系统按钮(最大小化等)