如何在QPrintPreviewDialog中获取当前正在预览的页码?
QPrintPreviewDialog 获取当前预览页码的实现方法
QPrintPreviewDialog 本质是对 QPrintPreviewWidget 的封装,完全可以获取当前预览页码,有两种实现方案:
- 适配Qt 5.8及以上版本
Qt 5.8起官方提供了QPrintPreviewDialog::previewWidget()公共方法,可以直接获取内部封装的QPrintPreviewWidget实例,直接调用其currentPage()方法即可:
// 实例化预览对话框 QPrintPreviewDialog previewDialog; // 在需要获取页码的时机调用即可 int currentPreviewPage = previewDialog.previewWidget()->currentPage();
- 兼容低版本Qt的方案
如果使用的Qt版本低于5.8,没有提供previewWidget()接口,可以通过findChild查找对话框内部的QPrintPreviewWidget类型子部件实现:
QPrintPreviewDialog previewDialog; // 查找内部封装的预览控件实例 QPrintPreviewWidget *internalPreviewWidget = previewDialog.findChild<QPrintPreviewWidget *>(); if (internalPreviewWidget) { int currentPreviewPage = internalPreviewWidget->currentPage(); // 后续页码处理逻辑 }
- 实时监听页码变化的方案
如果需要在用户切换预览页码时实时触发逻辑,可以绑定QPrintPreviewWidget的pageChanged(int)信号:
QPrintPreviewDialog previewDialog; QPrintPreviewWidget *internalPreviewWidget = previewDialog.findChild<QPrintPreviewWidget *>(); if (internalPreviewWidget) { connect(internalPreviewWidget, &QPrintPreviewWidget::pageChanged, this, [=](int newPage){ // 页码变化时的处理逻辑,newPage即为当前最新页码 qDebug() << "当前预览页码已切换为:" << newPage; }); }
注意:currentPage()的返回值从1开始计数,第一页对应返回值为1,不要和0起始的数组/列表索引逻辑混淆
内容的提问来源于stack exchange,提问作者Donk Mart
相关产品推荐
相关产品推荐

