阅读源代码。
在这种情况下,请阅读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.
现在,如果您想在已部署的二进制文件上修改小部件的行为,事情会变得更丑陋。在这种情况下我无能为力。