Russian Qt Forum

Qt => Qt Quick => Тема начата: Norad от Январь 15, 2015, 09:56



Название: Выравнивание QML содержимого в QWidget
Отправлено: Norad от Январь 15, 2015, 09:56
Добрый день! Возможно ли сделать так, чтобы QML содержимое виджета центрировалось при растягивании окна программы? До этого делал и отображал только фиксированные значения. QML на виджете отображаю таким образом:
Код:
view = new QQuickView;
    QWidget *container = QWidget::createWindowContainer(view, ui->widget);
    QHBoxLayout *layout = new QHBoxLayout(ui->widget);
    layout->addWidget(container);
    ui->widget->setLayout(layout);
    view->setSource(QUrl("qrc:/main.qml"));

Для начала хотел отцентрировать левый верхний угол квадрата 50х50 по центру виджета, но не вышло - выдает следующую ошибку : Unable to assign QQuickAnchorLine to double :(
Содержимое QML файла:
Код:
import QtQuick 2.0

Item {
    id: par

    width: 100
    height: 100
    anchors.fill: parent
    Rectangle {
        color: "red"
        x: par.verticalCenter
        y: par.horizontalCenter
        height:50
        width: 50


    }
}

Заранее спасибо за ответы!


Название: Re: Выравнивание QML содержимого в QWidget
Отправлено: arhohryakov от Январь 15, 2015, 11:52
Пишут почти по-русски: нельзя назначить один тип (QQuickAnchorLine ) другому (double).
x - double, par.verticalCenter - QQuickAnchorLine
Нужно привязать якоря к якорям. Как-то так:
Код:
import QtQuick 2.0

Item {
    id: par

    width: 100
    height: 100
    anchors.fill: parent
    Rectangle {
        color: "red"
        anchors.top: par.verticalCenter
        anchors.left: par.horizontalCenter
        height:50
        width: 50
    }
}


Название: Re: Выравнивание QML содержимого в QWidget
Отправлено: Norad от Январь 15, 2015, 13:07
Спасибо, это работает) Но вот ведь не задача - как сделать так, чтобы Item занимал все пространство виджета? Я думал anchors.fill: parent сработает, но нет, ведь Widget родительским объектом для Item не является. Похоже, что мне нужно считывать значения размера виджета и передавать их в QML. Может есть другие варианты?)


Название: Re: Выравнивание QML содержимого в QWidget
Отправлено: RSATom от Январь 15, 2015, 13:31
Для решения проблемы нужно сделать 2 вещи:
1) Заставить QQuickView изменять  размер в соответствии с размером окна на котором он лежит (например через layout'ы)
2) Выставить resizeMode в QQuickView::SizeRootObjectToView (http://doc.qt.io/qt-5/qquickview.html#resizeMode-prop)


Название: Re: Выравнивание QML содержимого в QWidget
Отправлено: RSATom от Январь 15, 2015, 13:34
ну и
Код
   width: 100
   height: 100
   anchors.fill: parent
 
стоит убрать