阅读源代码。
在这种情况下,请阅读QPrintPreviewDialog
源代码以了解它是如何做到的。这个标准对话框有导航按钮和当前页面显示,所以它可以做你想做的事情(也就是说,如果我真的理解你想要完成的事情)。您正在寻找的方法如下(src/gui/dialogs/qprintpreviewdialog.cpp):
void QPrintPreviewDialogPrivate::_q_previewChanged()
void QPrintPreviewDialogPrivate::_q_navigate(QAction* action)
void QPrintPreviewDialogPrivate::updateNavActions()
基本上,_q_previewChanged()
连接到QPrintPreviewWidget::previewChanged()
信号。当它发出时,页码会使用从QPrintPreviewWidget::currentPage()
和获取的信息进行更新QPrintPreviewWidget::pageCount()
。
至于扩展行为,QPrintPreviewWidget
您可以尝试两种方法,它们都不需要定制版的 Qt:
延长QPrintPreviewWidget
在构造函数中,访问layout()
(它是内部使用的 QVBoxLayout),添加页脚小部件,将previewChanged()
信号连接到更新页码的插槽并完成。这种方法的问题在于它依赖于布局存在并且是QVBoxLayout
. 由于这在某种程度上是私有的,因此它可以与较新的版本中断。
创建一个新类扩展QWidget
或QFrame
如果您不要求您的小部件是QPrintPreviewWidget
.,只需创建一个新的QWidget
派生类并将打印预览小部件和页脚添加到布局,连接插槽等。使用您的派生小部件而不是QPrintPreviewWidget
.
现在,如果您想在已部署的二进制文件上修改小部件的行为,事情会变得更丑陋。在这种情况下我无能为力。