อ่านขนาดองค์ประกอบ QML ที่กำหนดโดย Anchors.fill: parent

ฉันกำลังเขียนปลั๊กอิน ส่วนขยาย QML และฉันกำลังมองหา วิธีเข้าถึงขนาดขององค์ประกอบที่ฉันเพิ่งใช้งาน

ขณะนี้ คุณสามารถสร้างองค์ประกอบใหม่ (ชื่อ CustomElement) ด้วยขนาดใดก็ได้ที่ผู้ใช้ต้องการโดยการกำหนดค่า ความกว้าง และ ความสูง ดังนั้นในไฟล์ QML ผู้ใช้สามารถทำได้ : :

CustomElement 
{
     id: my_elem
     width: 800
     height: 600
}

แต่ ฉันต้องการดึงข้อมูลขนาดได้เมื่อผู้ใช้กำหนดค่าขนาดผ่าน anchor เช่นนี้:

Rectangle
{
    width: 800
    height: 600

    CustomElement 
    {
        id: my_elem
        anchors.fill: parent
    }
}

ฉันไม่รู้ว่าจะเข้าถึงข้อมูล anchors ได้อย่างไร

คลาสปลั๊กอินถูกกำหนดเป็น:

class CustomElement: public QDeclarativeItem
{
    Q_OBJECT
    //Q_PROPERTY() stuff
public:
    // ...
};

ใน Constructor ของปลั๊กอิน ฉันตั้งค่า QGraphicsItem::ItemHasNoContents เป็น false:

CustomElement::CustomElement(QDeclarativeItem* parent)
: QDeclarativeItem(parent)
{
    qDebug() << "CustomElement::CustomElement parent is:" << parent;

    setFlag(QGraphicsItem::ItemHasNoContents, false);
}

หลังจากเพิ่มการดีบัก ฉันสังเกตเห็นว่า parent คือ 0 ซึ่งอธิบายว่าทำไมฉันจึงไม่สามารถเรียกข้อมูลที่เป็นประโยชน์ด้วย boundingRect() และวิธีการอื่นๆ ได้ เห็นได้ชัดว่าปัญหาคือปลั๊กอินของฉันไม่มีพาเรนต์ ฉันจะแก้ไขปัญหานี้ได้อย่างไร?


person karlphillip    schedule 25.11.2011    source แหล่งที่มา


คำตอบ (1)


แก้ไขแล้ว

การอ่าน ผู้ปกครองจะตั้งค่าเมื่อใด ช่วยให้ฉันค้นหาสิ่งที่ต้องการ ทำ. ปลั๊กอินนี้เป็นส่วนประกอบแบบกราฟิก (เช่น มีอินเทอร์เฟซแบบภาพ) ซึ่งหมายความว่าจะมีการวาดบนหน้าจอในบางจุด เมื่อ Qt โหลดส่วนประกอบของคุณเสร็จแล้ว มันจะเรียกเมธอดชื่อ componentComplete() เพื่อแจ้งให้คุณทราบ

สิ่งที่ฉันต้องทำคือเพิ่มวิธีนี้ในคำจำกัดความของคลาสของฉันเป็นวิธีการสาธารณะ:

virtual void componentComplete();

และนำไปใช้เป็น:

void CustomElement::componentComplete()
{
    Q_D(CustomElement);    

    // Call superclass method to set CustomElement() parent
    QDeclarativeItem::componentComplete();   
}

การเรียกเมธอดของซูเปอร์คลาสดูเหมือนจะตั้งค่าพาเรนต์ของปลั๊กอินของฉัน และสิ่งนี้ทำให้ฉันสามารถเข้าถึงข้อมูลที่ตั้งค่าโดย anchors.fill: parent

จากนั้นสิ่งที่ฉันต้องทำในการดึงข้อมูลนี้คือ:

Q_Q(Video);
qDebug() << "CustomElement::play: widget size is " << q->width() << "x" << q->height();
person karlphillip    schedule 25.11.2011
comment
คุณยุติการค้นหาสามวัน !! ซึ่งฉันสามารถโหวตได้สิบครั้ง - person Martin; 17.08.2012
comment
อืม มันยังใช้งานไม่ได้สำหรับฉัน Q_D และ Q_Q คืออะไร ถ้าฉันเรียก Q_D ด้วยชื่อคลาสของฉัน ฉันจะได้รับข้อผิดพลาดคอมมิลเลอร์ คุณช่วยโพสต์ตัวอย่างที่สมบูรณ์ได้ไหม - person Martin; 17.08.2012