Frage

Ich versuche, Qt QPrintPreviewWidget zu verbessern, indem es die Seitenzahl angezeigt wird (in der Fußzeile irgendwo). Leider kann ich nicht ganz herausfinden, wie man das macht, ohne Qt-Source-Hacking auf. Ich sehe einen großartigen Ort für diesen zusätzlichen Code (in qpaintengine_preview.cpp, in newPage () -Methode), aber das bedeutet, ich werde die ganze Qt müssen neu kompiliert werden (Ich habe einen binären Build von Trolltech). Außerdem, wenn ich eine App, die diese Funktionalität nutzt auf jemand anderes Feld entscheiden zu laufen, ich bin haben, es neu zu kompilieren und (sagen, wenn es ein anderer Bogen).

Gibt es andere Möglichkeiten, saubere?

Danke

War es hilfreich?

Lösung

Ist das newPage () -Methode virtuell? Wenn ja, könnten Sie eine Unterklasse und verwenden, die in Sie Anwendungen besitzen, die etwas einfacher sein würde.

Die zweite Option wäre, statisch ausführbare Datei mit den modifizierten Qt-Bibliotheken zu verknüpfen. Sie müssen sich bewusst sein Anliegen der Lizenzierung, dies zu tun. Auf diese Weise wird jeder Platz Sie die App setzen Sie Ihre geänderte Funktionalität haben. (Sie würden immer noch für verschiedene Architekturen neu kompiliert werden müssen.)

Schließlich könnten Sie die neuesten Quellen erhalten von http://qt.gitorious.org/ , ändern sie in der Art und Weise Sie wünschen, und legt den Trollen einen Patch zurück. Wenn Sie dies tun, werden Sie wahrscheinlich das alte Verhalten der Standards halten müssen, und eine Option hinzufügen, das neue Verhalten zu aktivieren. Sie können oder auch den Patch nicht akzeptieren. Und wenn sie den Patch zu tun akzeptieren, können Sie nicht in der Lage sein, auf anderen Computern vertrauen, dass die Version schon seit geraumer Zeit immer, wenn überhaupt.

Andere Tipps

Lesen Sie den Quellcode.

In diesem Fall lesen QPrintPreviewDialog Quellcode zu sehen, wie sie es tut. Dieser Standard-Dialog hat Navigationstasten und eine aktuelle Seite angezeigt, so dass es von Art tut, was Sie wollen (das heißt, wenn ich wirklich was verstehen Sie erreichen möchten). Die Methoden, die Sie suchen, sind die folgenden (src / gui / Dialoge / qprintpreviewdialog.cpp):

void QPrintPreviewDialogPrivate::_q_previewChanged()
void QPrintPreviewDialogPrivate::_q_navigate(QAction* action)
void QPrintPreviewDialogPrivate::updateNavActions()

Grundsätzlich _q_previewChanged() angeschlossen Signal QPrintPreviewWidget::previewChanged(). Wenn es ausgesendet wird, wird die Seitennummer mit Informationen von QPrintPreviewWidget::currentPage() und QPrintPreviewWidget::pageCount() erworben aktualisiert.

Wie für das Verhalten von QPrintPreviewWidget erstrecken Sie zwei Ansätze versuchen können, die beide nicht über eine zugeschnittene Version von Qt benötigen:

Extend QPrintPreviewWidget

Im Konstruktor zugreifen die layout() (es ist ein QVBoxLayout die interanally verwendet wird), die Fußzeile Widget hinzufügen, schließen Sie das previewChanged() Signal an einen Schlitz, der die Seitennummer aktualisiert und durchgeführt werden. Das Problem bei diesem Ansatz ist, dass es auf dem Layout zählt anwesend zu sein und ein QVBoxLayout sein. Da dies irgendwie privat ist, kann es mit neueren Versionen brechen.

Erstellen Sie eine neue Klasse erweitern QWidget oder QFrame

Wenn Sie nicht Ihr Widget benötigen eine QPrintPreviewWidget zu sein, nur eine neue QWidget abgeleitete Klasse erstellen und die Druckvorschau-Widget und die Fußzeile zu einem Layout hinzufügen, verbindet Schlitze usw. Ihr Widget statt QPrintPreviewWidget abgeleitet verwenden.

Wenn Sie nun das Verhalten des Widgets auf bereits bereitgestellt Binärdateien ändern möchten, werden die Dinge hässlicher. Ich kann in diesem Fall nicht helfen.

Wenn Sie eine Bibliothek haben und diese Bibliothek hat die gleichen Symbole Linker zur Laufzeit sucht - den Code für die Druckvorschau zu erhalten - dann können Sie Ihren eigenen Code injizieren, um die tatsächliche Umsetzung zu ersetzen. Verfahren wird DLL-Injektion genannt.

Überprüfen Sie http://en.wikipedia.org/wiki/DLL_injection für weitere Informationen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top