Каков эквивалент «QT_CONFIG()» Qt для c в PyQt5 (для Python)?

#python #pyqt #pyqt5

#python #pyqt #pyqt5

Вопрос:

Я создаю приложение для рисования, как показано в этом руководстве: http://www.newthinktank.com/2018/07/qt-tutorial-5-paint-app / Разница в том, что это сделано на c с помощью Qt, и я пытаюсь перевести его на Python Qt. Однако я не могу найти никакого эквивалента «# if QT_CONFIG» для Python в коде:

 #if QT_CONFIG(printdialog)
 
    // Can be used to print
    QPrinter printer(QPrinter::HighResolution);
 
    // Open printer dialog and print if asked
    QPrintDialog printDialog(amp;printer, this);
    if (printDialog.exec() == QDialog::Accepted) {
        QPainter painter(amp;printer);
        QRect rect = painter.viewport();
        QSize size = image.size();
        size.scale(rect.size(), Qt::KeepAspectRatio);
        painter.setViewport(rect.x(), rect.y(), size.width(), size.height());
        painter.setWindow(image.rect());
        painter.drawImage(0, 0, image);
    }
#endif // QT_CONFIG(printdialog)
 

Ответ №1:

Нет прямого перевода QT_CONFIG , поскольку это команда предварительной обработки, используемая компилятором C , и эта концепция не существует в python.

Итак, если это можно сделать, это логический или функциональный перевод, цель этой команды — выяснить, включила ли библиотека Qt, используемая для компиляции, флаг для подмодуля printsupport, что в случае PyQt5 подразумевает, что модуль QtPrintSupport существует, например, просто используйте try-except:

 def print(self):
    try:
        from PyQt5.QtPrintSupport import QPrinter, QPrintDialog
    except ImportError as e:
        print("not print support")
    else:
        printer = QPrinter(QPrinter.HighResolution)
        printDialog = QPrintDialog(printer, self)
        if printDialog.exec_() == QDialog.Accepted:
            painter = QPainter(printer)
            rect = painter.viewport()
            size = self.image.size()
            size.scale(rect.size(), Qt.KeepAspectRatio)
            painter.setViewport(rect.x(), rect.y(), size.width(), size.height())
            painter.setWindow(self.image.rect())
            painter.drawImage(0, 0, self.image)
 

Примечание: По умолчанию официально предоставляемая библиотека всегда поставляется с флагом printdialog, включенным по умолчанию, поэтому вы можете просто игнорировать QT_CONFIG(printdialog) в своем переводе, если только вы не скомпилировали Qt с отключенным этим флагом, а затем использовать этот Qt для компиляции PyQt5.