Qt Creator - Overload型信号的处理

Overload型信号

在QCheckBox类组件的“转到槽”对话框中,有两个名称为clicked的信号,一个是不带参数的clicked()信号,一个是带参数的click(bool)信号,这种名称相同,但参数个数或者类型不同的信号就是overload型信号。

我们将Italic checkbox的信号定为clicked(bool)。

上篇文章我们提到了connectSlotsByName()函数进行信号与槽函数的关联时,会使用一个默认的信号,对QCheckBox来说,默认使用的是不带参数的click()信号。所以我们需要传递参数checked。不然会报错。

Qt Creator - Overload型信号的处理_第1张图片

 pyqtSlot修饰符

使用@pyqtSlot修饰符声明函数参数类型后,connectSlotsByName()函数就会自动使用clicked(bool)信号与这个槽函数关联,运行就没问题了。

修饰符代码示例

from PyQt6.QtCore import pyqtSlot
   
@pyqtSlot(bool)
def on_checkBox_2_clicked(self, checked):
    font = self.__ui.plainTextEdit.font()
    font.setItalic(checked)
    self.__ui.plainTextEdit.setFont(font)

appMain.py完整代码

import sys
from PyQt6.QtWidgets import QApplication, QDialog
from ui_Dialog import Ui_Dialog
from PyQt6.QtCore import pyqtSlot


class QmyDialog(QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.__ui = Ui_Dialog()
        self.__ui.setupUi(self)

    def on_checkBox_3_toggled(self, checked):
        font = self.__ui.plainTextEdit.font()
        # 参数checked表示勾选状态
        font.setBold(checked)
        self.__ui.plainTextEdit.setFont(font)

    def on_checkBox_clicked(self):
        checked = self.__ui.checkBox.isChecked()
        font = self.__ui.plainTextEdit.font()
        font.setUnderline(checked)
        self.__ui.plainTextEdit.setFont(font)

    @pyqtSlot(bool)
    def on_checkBox_2_clicked(self, checked):
        font = self.__ui.plainTextEdit.font()
        font.setItalic(checked)
        self.__ui.plainTextEdit.setFont(font)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    myDialog = QmyDialog()
    myDialog.show()
    sys.exit(app.exec())

你可能感兴趣的:(Python,qt,开发语言)