QPainter не является наследником QObject?

Подскажите пожалуйста, почему код

from PyQt5 import QtGui
from PyQt5 import QtCore
isinstance(QtGui.QPainter(), QtCore.QObject)

возвращает False? Разве QPainter не является наследником QObject?

Если же он всё же является, то почему я не могу вызвать метод deleteLater() класса QObject?

Более подробно о том, почему меня это интересует. Вот кусок слота, который завершается ошибкой:

QWin32PrintEngine::newPage: EndPage failed (Неверный дескриптор.)
QPaintDevice: Cannot destroy paint device that is being painted

printer = QPrinter(QPrinter.HighResolution)
        dialog = QPrintDialog(printer, view)
        if dialog.exec_() != QtWidgets.QDialog.Accepted:
            return
        loop = QtCore.QEventLoop()
        result = False

        def print_preview(success):
            nonlocal result
            result = success
            loop.quit()

        progressbar = QtWidgets.QProgressDialog(view)
        progressbar.setWindowTitle("Печать")
        progressbar.findChild(QtWidgets.QProgressBar).setTextVisible(False)
        progressbar.setLabelText("Подождите. Идёт отправка файла на печать...")
        progressbar.setRange(0, 0)
        progressbar.show()
        progressbar.canceled.connect(loop.quit)
        page = view.page()
        page.print(printer, print_preview)
        loop.exec_()
        progressbar.close()
        if not result:
            title = "Ошибка"
            text = "Ошибка печати."
            icon = QtWidgets.QMessageBox.Critical
            create_messagebox(title, text, icon)

Ошибка вылетает при испускании сигнала cancel в progressbar. Т.е. QPainter, находящийся внутри QPrinter начинает рисовать, но при нажатии кнопки cancel, происходит выход из слота и QPainter не может удалиться. Я прочитал на форумах, что для этого нужно вызвать метод deleteLater() класса QObject, однако, QPainter не может вызвать метод из класса QObject.


РЕШЕНИЕ МОЕЙ ПРОБЛЕМЫ:

Создать класс обёртку PrinterHandler и реализовать внутри него метод (слот) def cancel(self):, который будет учитывать сценарий работы с принтером Microsoft XPS Document Writer.

 class PrinterHandler(object):
            def __init__(self):
                self.loop = QtCore.QEventLoop()
                self.printer = QPrinter(QPrinter.HighResolution)
                self.result = False

            def cancel(self):
                xpsStr = "Microsoft XPS Document Writer"
                if self.printer.printerName() == xpsStr and not self.result:
                    title = "Внимание"
                    text = "Выбран принтер Microsoft XPS Document Writer. Отменить печать невозможно."
                    icon = QtWidgets.QMessageBox.Critical
                    create_messagebox(title, text, icon)
                    return
                self.loop.quit()

        printerHandler = PrinterHandler()
        dialog = QPrintDialog(printerHandler.printer, view)
        if dialog.exec_() != QtWidgets.QDialog.Accepted:
            return
        result = False

        def print_preview(success):
            nonlocal result
            result = success
            printerHandler.loop.quit()

        progressbar = QtWidgets.QProgressDialog(view)
        progressbar.setWindowTitle("Печать")
        progressbar.findChild(QtWidgets.QProgressBar).setTextVisible(False)
        progressbar.setLabelText("Подождите. Идёт отправка файла на печать...")
        progressbar.setRange(0, 0)
        progressbar.show()
        progressbar.canceled.connect(printerHandler.cancel)
        page = view.page()
        page.print(printerHandler.printer, print_preview)
        printerHandler.loop.exec_()
        if not result:
            # NEED TO: progressbar закрывается?
            title = "Ошибка"
            text = "Ошибка печати."
            icon = QtWidgets.QMessageBox.Critical
            create_messagebox(title, text, icon)
        else:
            printerHandler.result = True
            progressbar.close()
            title = "Печать"
            text = "Файл отправлен на печать."
            icon = QtWidgets.QMessageBox.Information
            create_messagebox(title, text, icon)

Ответы (1 шт):

Автор решения: S. Nick

Класс QPainter выполняет низкоуровневую отрисовку виджетов и других устройств рисования и не наследуется от QObject.

введите сюда описание изображения

Что наследуется от QObject -> https://doc.qt.io/qt-5/qobject.html

введите сюда описание изображения

А вот например QtWidgets.QWidget наследуется от QObject

введите сюда описание изображения

→ Ссылка