هل هناك طريقة لجعل السحب () تحديث مستقلة qpicture

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

  •  16-09-2019
  •  | 
  •  

سؤال

الرسم على أ QPicture يجب تحديث مستقلا. مثله:

>>> picture = QPicture()
>>> painter = QPainter(picture)
>>> picture.boundingRect()
QRect(0,0,0,0)
>>> painter.drawRect(20,20,50,50)
>>> picture.boundingRect()
QRect(20,20,50,50)

ولكن إذا ارسمت نصا عليه، فلن يتم تحديث الخصم المحيطي:

>>> picture = QPicture()
>>> painter = QPainter(picture)
>>> picture.boundingRect()
QRect(0,0,0,0)
>>> painter.drawText(10,10, "Hello, World!")
>>> picture.boundingRect()
QRect(0,0,0,0)

من الواضح أنه لا يقوم بتحديث مستقلا.

هل هناك طريقة لجعلها تطلع على نص رسم أو هل يجب علي القيام بذلك يدويا؟ (ليس من الصعب جدا، ولكن آمل أن يساعدني كيو تي هنا.)

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

المحلول

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

يرسم النص المحدد داخل المستطيل المقدم وفقا للأعلام المحددة. يتم تعيين BoundingRect (إن لم يكن NULL) على ما يجب أن يكون المستطيل المحيط من أجل إحاطة النص بأكمله.

qpainter.drawtext (1), qpainter.drawtext (2)

تحديث:

يبدو إذا كنت ترغب في إنشاء مستطيل محيط لطريقة Drawtext () مسبقا، يمكنك فقط استدعاء الأسلوب BoundingRect () على Qpainter، والتي ما يلي:

إرجاع المستطيل المحيط للنص كما سيظهر عند رسمها داخل المستطيل المحدد مع العلامات المحددة باستخدام الخط المحدد حاليا ()؛ أي أن الوظيفة تخبرك حيث سترسم وظيفة Drawtext () عند إعطاء نفس الوسائط.

إذا كان النص لا يصلح داخل المستطيل المحدد باستخدام العلامات المحددة، فإن الدالة تعرض المستطيل المطلوب.

qapainter.boundingRect.

ربطت BoundingRect مع إخراج QRectf، ولكن المعلومات تنطبق على الإصدارات الأخرى أيضا.

في الأساس، قم بتمرير نتيجة QPArteer.BoundingRect () في المعلمة BoundingRect من طريقة QPANTER.DRAWTEXT () (حجة QRECT الثانية).

تحديث 2:

أعتذر بغزارة لكونها كثيفة للغاية. لقد نسيت أن يعمل السحب بشكل مختلف في PYQT من كيو تي. يتم إرجاع المستطيل المحدد بواسطة وظيفة السحب (غير مرت مثل QT) وبالإضافة إلى ذلك، يجب عليك تحديد إشارات المحاذاة قبل الحصول على مستطيل محيط يعود إليك. (لقد شملت حتى P.end () حسب تعليق Aaron Digulla):

pic = Qt.QPicture()
p = QtGui.QPainter(pic)
brect = p.drawText(10,10,200,200, QtCore.Qt.AlignCenter, "blah")
p.end()
print brect
print pic.boundingRect()

هنا هو الإخراج:

pyqt4.qtcore.qriect (100، 103، 20، 14)

pyqt4.qtcore.qriect (0، 0، 0، 0)

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

هذا لا يبدو وكأنه سلوك مثالي، بحيث يتعين عليك ضبط المستطيل المحيط بنفسك. آمل أن يكون لدى شخص آخر الجواب الذي تبحث عنه، لكنني أظن أنك قد ترغب في الإبلاغ عن هذا الخطأ.

نصائح أخرى

اللوحة لا تغير حجم شيء ما في كيو تي. السبب الرئيسي هو:

  • مكون يجب أن يرسم نفسه
  • الطلاء يؤدي إلى تغيير حجم
  • تغيير حجم المشغلات اللوحة -> حلقة لا نهاية لها

لذلك يجب أن يحدث تغيير حجم خلال مرحلة التخطيط. بعد ذلك، يجب ألا تتغير الحدود.

لحل مشكلتك، استخدم QFontmetric لمعرفة مدى أن يكون نصك كبيرا أثناء إنشاء صورتك أو بالقرب منه ثم تغيير حجمه وفقا لذلك.

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

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