Считать размер элемента QML, определенный anchors.fill: parent - PullRequest
7 голосов
/ 25 ноября 2011

Я пишу плагин QML extension и ищу способ доступа к размеру элемента, который я только что реализовал.

Прямо сейчас новый элемент (с именем CustomElement) можно создать с любым размером, который желает пользователь, определив его значения width и height , поэтому в файле 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:
    // ...
};

В конструкторе плагина я установил для QGraphicsItem::ItemHasNoContents значение false:

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

    setFlag(QGraphicsItem::ItemHasNoContents, false);
}

После добавления отладки я заметил, что parent равен 0, что объясняет, почему я не могу получить полезную информацию с помощью boundingRect() и других методов. Видимо, проблема в том, что у моего плагина нет родителя. Как мне решить эту проблему?

1 Ответ

5 голосов
/ 26 ноября 2011

Решено .

Чтение Когда устанавливается родительский набор? помог мне найти то, что мне нужно было сделать.Этот плагин является графическим компонентом (то есть имеет визуальный интерфейс), что означает, что он будет нарисован на экране в какой-то момент.Когда 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...