문제

QT의 QPRINTPREVIEWWIDGET을 페이지 번호 (어딘가 바닥 글에) 표시하도록하여 QT의 QT의 QT를 향상 시키려고 노력하고 있습니다. 불행히도, 나는 QT의 소스를 해킹하지 않고는 방법을 알 수 없습니다. 이 추가 코드 (qpaintengine_preview.cpp, newPage () 메소드)에 대한 훌륭한 장소를 볼 수 있지만 QT 전체를 다시 컴파일해야한다는 것을 의미합니다 (Trolltech에서 이진 빌드를 얻었습니다). 또한 다른 사람의 상자 에이 기능을 사용하는 앱을 실행하기로 결정한 경우 거기에도 다시 컴파일해야합니다 (예 : 다른 아치인지).

다른 더 깨끗한 방법이 있습니까?

감사

도움이 되었습니까?

해결책

NewPage () 메소드 가상입니까? 그렇다면 서브 클래스를 사용하여 자신의 애플리케이션에서 사용할 수 있습니다.

두 번째 옵션은 실행 파일을 수정 된 QT 라이브러리와 정적으로 연결하는 것입니다. 이를 위해 라이센스 문제를 알고 있어야합니다. 이렇게하면 앱을 넣은 모든 장소에는 수정 된 기능이 있습니다. (여전히 다른 아키텍처를 위해 다시 컴파일해야합니다.)

마지막으로 최신 출처를 얻을 수 있습니다 http://qt.gitorious.org/, 원하는 방식으로 수정하고 패치를 트롤에 다시 제출하십시오. 이렇게하면 이전 동작을 기본값으로 유지하고 새로운 동작을 활성화하기 위해 옵션을 추가해야 할 것입니다. 그들은 패치를 받아 들일 수도 있고받지 않을 수도 있습니다. 그리고 그들이 패치를 받아 들인다면, 당신은 다른 사람들의 컴퓨터가 그 버전을 꽤 오랫동안 얻는 데 의존하지 않을 수 있습니다.

다른 팁

소스 코드를 읽으십시오.

이 경우 읽으십시오 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() (interanly에서 사용되는 QVBoxLayout입니다) 바닥 글 위젯을 추가하고 연결하십시오. previewChanged() 페이지 번호를 업데이트하고 완료하는 슬롯에 신호를 보냅니다. 이 접근법의 문제는 그것이 존재하는 레이아웃에 의존하고 QVBoxLayout. 이것은 어떻게 든 비공개이므로 새로운 버전으로 깨질 수 있습니다.

새로운 클래스 확장을 만듭니다 QWidget 또는 QFrame

위젯이 필요하지 않은 경우 QPrintPreviewWidget, 그냥 새로운 것을 만듭니다 QWidget 파생 클래스 및 인쇄 미리보기 위젯과 바닥 글을 레이아웃에 추가하고 슬롯을 연결합니다. QPrintPreviewWidget.

이제 이미 배포 된 바이너리에서 위젯의 동작을 수정하려면 상황이 더 나빠집니다. 이 경우에 도움이되지 않습니다.

라이브러리가 있고이 라이브러리에 Runtime에서 동일한 기호 링커가있는 경우 (인쇄 미리보기 코드를 얻으려면) 자신의 코드를 주입하여 실제 구현을 대체 할 수 있습니다. 방법을 DLL 주입이라고합니다.

확인하다 http://en.wikipedia.org/wiki/dll_injection 더 많은 정보를 위해서

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top