Как изменить размер виджета QML, встроенного в QWidget? - PullRequest
4 голосов
/ 14 марта 2011

Как я могу автоматически изменить размер виджета QML?

У меня есть QWidget, созданный вручную. В этом виджете создан компонент QML.

Но когда я изменяю размер QWidget, компонент QML не изменяет размер.

Какой-то код ...

У меня есть класс MyCustomQWidget

Заголовок:

Class MyCustomQWidget : public QWidget
{
Q_OBJECT
public:
    QDeclarativeView* view;
private:
        QWidget* m_GUI;
public:
    QWidget* getGUI()  {return m_GUI;};
}

Источник:

MyCustomQWidget:: MyCustomQWidget (QWidget *parent) :QWidget(parent)
{
    m_GUI = new QWidget();

    view = new QDeclarativeView(m_GUI);
    view->setSource(QUrl("qrc:/qml/gui.qml"));
    //view->setResizeMode(QDeclarativeView::SizeRootObjectToView);
}

В виджете основного графического интерфейса

QWidget* pCustomGUI = new MyCustomQWidget(…)
pVLayoutLeft->addWidget(pCustomGUI->getGUI);

Ответы [ 3 ]

6 голосов
/ 14 марта 2011

В этом вопросе не так много деталей, но если вы используете QDeclarativeView для отображения QML, посмотрите на его setResizeMode() член.Установка QDeclarativeView::SizeRootObjectToView может просто сделать то, что вы ищете: он автоматически изменяет размер корневого объекта QML до размера представления.

2 голосов
/ 13 июня 2011

Когда вы помещаете виджет Qt в другой виджет Qt, вы должны вручную изменить его размер или использовать макет, чтобы сделать это автоматически.

Несколько традиционно создается виджет без явного родителя, и пусть макет назначает родителя при добавлении виджета.

Я не совсем уверен, почему у вас есть 3 слоя виджетов здесь, но если вы не можете просто подкласс QDeclarativeView для вашего пользовательского виджета, вы можете получить что-то вроде этого:

Class MyCustomQWidget : public QWidget
{
Q_OBJECT
private:
    QDeclarativeView* view;
}

и

MyCustomQWidget:: MyCustomQWidget (QWidget *parent)
    : QWidget(parent)
{
    QHBoxLayout *box = new QHBoxLayout(this);

    view = new QDeclarativeView;
    view->setSource(QUrl("qrc:/qml/gui.qml"));
    //view->setResizeMode(QDeclarativeView::SizeRootObjectToView);

    box->addWidget(view);
}
0 голосов
/ 27 апреля 2011
FocusScope
{
     anchors.fill: parent


     [... some qml]
}

Это соответствует FocusScope к размеру родительского объекта, в этом случае QDeclarativeView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...