有没有办法在 QPrintPreviewDialog 中 return 当前查看的页面?

Is there a way to return current viewed page in QPrintPreviewDialog?

我知道可以通过 currentPage() 函数使用 QPrintPreviewWidget,但是有没有办法在 QPrintPreviewDialog 中 return 当前页面?由于我喜欢默认的QPrintPreviewDialog的界面,而且我没有足够的信心自己重建它,所以我想使用QPrintPreviewDialog

QPrintPreviewDialog 是一个以 QPrintPreviewWidget 作为内部元素的 QDialog,因此使用 findChild 可以获取该对象。

#include <QApplication>

#include <QPrintPreviewDialog>
#include <QPrintPreviewWidget>
#include <QPrinter>
#include <QTimer>

#include <QTextCursor>
#include <QTextDocument>

#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QPrintPreviewDialog previewDialog;

    QObject::connect(&previewDialog, &QPrintPreviewDialog::paintRequested, &previewDialog, [&previewDialog](QPrinter *printer){
        QTextDocument document;
        QTextCursor cursor(&document);
        QTextBlockFormat blockFormat;
        for(int i=0; i < 10; i++){
            cursor.insertBlock(blockFormat);
            cursor.insertHtml(QString("<h1>This is the %1 page</h1>").arg(i+1));
            blockFormat.setPageBreakPolicy(QTextFormat::PageBreak_AlwaysBefore);
        }
        document.print(printer);
        if(QPrintPreviewWidget *previewWidget = previewDialog.findChild<QPrintPreviewWidget *>()){
            qDebug() << previewWidget->currentPage();
            // change page
            QTimer::singleShot(100, previewWidget, [previewWidget](){
                previewWidget->setCurrentPage(2);
            });
        }
    });

    previewDialog.exec();
}