تعديل Qt المكونات الأساسية/الحاجيات ، وأفضل الممارسات ؟ [مغلقة]

StackOverflow https://stackoverflow.com/questions/1800272

  •  05-07-2019
  •  | 
  •  

سؤال

أنا في محاولة لتعزيز "كيو تي" QPrintPreviewWidget بالسماح لها عرض أرقام الصفحات (في تذييل الصفحة في مكان ما).للأسف, أنا لا يمكن معرفة تماما كيفية القيام بذلك بدون تقطيع Qt المصدر.أرى بقعة كبيرة لهذا تعليمات برمجية إضافية (في qpaintengine_preview.cpp في newPage (طريقة)) ولكن هذا يعني أنني ذاهب إلى أن ترجمة كل من كيو تي (لدي الثنائية بناء من ترولتيك).وعلاوة على ذلك, إذا كنت ترغب في تشغيل التطبيق الذي يستخدم هذه الوظيفة على شخص آخر مربع, أنا ذاهب إلى إعادة ترجمة هناك أيضا (قل لو كان قوس مختلفة).

هل هناك أي منظف آخر الطرق ؟

شكرا

هل كانت مفيدة؟

المحلول

هل طريقة NEWPAGE () الظاهري؟ إذا كان الأمر كذلك، هل يمكن أن فئة فرعية واستخدام ذلك في كنت تملك التطبيقات، والتي ستكون أسهل قليلا.

والخيار الثاني سيكون لربط ثابت قابل للتنفيذ الخاص بك مع مكتبات كيو تي المعدلة. عليك أن تكون على بينة من الترخيص المخاوف للقيام بذلك. بهذه الطريقة، سيكون كل مكان كنت وضعت التطبيق لديها وظائف المعدلة. (أنت لا تزال في حاجة إلى إعادة ترجمة لأبنية مختلفة).

وأخيرا، هل يمكن الحصول على أحدث مصادر من 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() (وهو QVBoxLayout المستخدمة interanally) ، إضافة القطعة تذييل الصفحة ، قم بتوصيل previewChanged() إشارة إلى فتحة التحديثات رقم الصفحة وينبغي القيام به.المشكلة مع هذا النهج هو أنه يعتمد على تخطيط أن يكون حاضرا ويكون QVBoxLayout.لأن هذا هو بطريقة أو بأخرى خاصة ، يمكن أن تنفصل مع أحدث الإصدارات.

إنشاء فئة جديدة تمتد QWidget أو QFrame

إذا كنت لا تتطلب القطعة الخاصة بك أن تكون QPrintPreviewWidget, فقط خلق جديد QWidget فئة مشتقة وإضافة معاينة القطعة تذييل الصفحة إلى تخطيط ، يربط فتحات الخ.استخدام الخاص بك مشتقة القطعة بدلا من QPrintPreviewWidget.

الآن, إذا كنت ترغب في تعديل سلوك القطعة على نشر الثنائيات الأمور أقبح.أنا لا يمكن أن تساعد في هذه الحالة.

إذا كان لديك مكتبة وهذه المكتبة على نفس الرموز رابط في وقت تتطلع ل- للحصول على رمز للمعاينة قبل الطباعة - ثم يمكنك حقن التعليمات البرمجية الخاصة بك لتحل محل التنفيذ الحقيقي. وتسمى طريقة الحقن DLL.

http://en.wikipedia.org/wiki/DLL_injection للحصول على مزيد من المعلومات

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top