如何将 QChekBox 状态连接到 QComboBox 状态?

How to connect QChekBox state to QComboBox state?

我想启用一个组合框 - 它在 Qt Designer 的属性编辑器中被禁用 - 但是,只有当用户选中该复选框时。我写了以下内容,但它不起作用。它放在我的 mainclass 的 __init__ 方法中。你能帮我理解为什么吗?

if self.dlg.checkBox.isChecked():
    self.dlg.cmbvectorLayer6.setEnabled(True)

编辑:

我现在在 class 的 __init__ 方法中有以下内容:

self.dlg.checkBox.stateChanged[int].connect(self.enablecombo)

其中 enablecombo 为:

def enablecombo(self):
    self.dlg.cmbvectorLayer6.setEnabled(True)

它可以很好地激活组合框。但是我不确定如何做等效的事情以便在未选中复选框时禁用组合框...

self.dlg.checkBox.stateChanged[int].connect(self.checkcombo) 

whatewer 是当前状态,只需调用一个函数来检查它,然后根据它的输出 enable/disable it

def checkcombo():
    if self.dlg.checkBox.isChecked():
        self.dlg.cmbvectorLayer6.setEnabled(True)
    else:
        self.dlg.cmbvectorLayer6.setEnabled(False)
if self.dlg.checkBox.isEnabled():
    self.dlg.cmbvectorLayer6.setEnabled(True)

你检查的状态是checked但是你需要检查isEnabled

QCheckBoxclass继承了QAbstractButton,所以你可以用toggled信号做你想做的事情:

    self.dlg.checkBox.toggled.connect(self.enablecombo)
    ...

def enablecombo(self, checked):
    self.dlg.cmbvectorLayer6.setEnabled(checked)

或直接连接组合框:

    self.dlg.checkBox.toggled.connect(self.dlg.cmbvectorLayer6.setEnabled)

(您也可以在 Qt Designer 中设置这些类型的直接连接,方法是使用 Signals and Slots Editing Mode