ソースコードを読んでください。
この場合、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
、2つのアプローチを試すことができますが、どちらもQtのカスタマイズされたバージョンを必要としません。
拡張するQPrintPreviewWidget
コンストラクターで、layout()
(内部で使用されるのはQVBoxLayoutです)にアクセスし、フッターウィジェットを追加しpreviewChanged()
、ページ番号を更新するスロットにシグナルを接続して完了します。このアプローチの問題は、レイアウトが存在し、存在することを期待していることQVBoxLayout
です。これはどういうわけかプライベートなので、新しいバージョンでは壊れることがあります。
QWidget
またはを拡張する新しいクラスを作成しますQFrame
ウィジェットをである必要がない場合はQPrintPreviewWidget
、新しいQWidget
派生クラスを作成し、印刷プレビューウィジェットとフッターをレイアウトに追加し、スロットを接続するなどします。の代わりに派生ウィジェットを使用しますQPrintPreviewWidget
。
ここで、すでにデプロイされているバイナリでウィジェットの動作を変更したい場合、状況はさらに醜くなります。この場合、私は仕方がありません。