سؤال

لقد كنت أحقق مع هذه القطعة من التعليمات البرمجية:

QGraphicsLineItem * anotherLine = this->addLine(50,50, 100, 100);
qDebug() << anotherLine->scenePos();

QGraphicsLineItem * anotherLine2 = this->addLine(80,10, 300, 300);
qDebug() << anotherLine2->scenePos();

أين ال this يشير المؤشر إلى QGraphicsScene. وبعد في كلتا الحالتين، أحصل QPointF(0,0) لكلا الإخراج.
من قراءة المستند، فكرت scenePos() من المفترض أن يعيد موقف الخط داخل المشهد، وليس حيث يقع في ضمن نظام الإحداثيات المحلية. ما الخطأ الذي افعله؟

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

المحلول

بعد قراءة وثائق QT 4.5 بعناية addline., ، أدرك ما كنت أفعله خطأ. وفقا للمسؤول:

لاحظ أن هندسة العنصر يتم توفيرها في إحداثيات البند، ويتم تهيئة موقفها إلى (0، 0)

لذلك إذا حددت ALDLINE (50،50، 100، 100)، فأنا في الواقع تعديل تنسيق العناصر المحلية الخاصة بها. الافتراض الذي أدليت به أنه سيتم التعامل معه كإنساج مشهد خطأ أو لا أساس له. ما يجب أن أفعله هو هذا

// Create a line of length 100
QGraphicsItem * anotherLine = addLine(0,0, 100, 100); 

// move it to where I want it to be within the scene
anotherLine->setPos(50,50);

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

آمل أن يساعد هذا أي شخص يتعثر على نفس المشكلة.

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