有没有办法在 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();
}
我知道可以通过 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();
}