Russian Qt Forum

Qt => Qt Quick => Тема начата: folax от Январь 09, 2017, 17:25



Название: Динамическое увеличение размера окна.
Отправлено: folax от Январь 09, 2017, 17:25
Добрый день, помогите решить проблему пожалуйста. Хочу при увеличении ширины увеличивать размер высоты окна (и наоборот). Почему не работает этот код ? Он вроде бы увеличивает окно но потом возвращается на своё место. Может есть какой то обходной путь ?

Код:
ApplicationWindow
{
    id: root
    visible: true
    width: 400
    height: 400

    function changeHeight()
    {
        root.height = root.width
    }

    onWidthChanged:
        changeHeight()
}

вызов и main.cpp

Код:
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    return app.exec();
}


Название: Re: Динамическое увеличение размера окна.
Отправлено: vebmaster от Январь 09, 2017, 18:10
а попробуйте прям сразу прописать в главном окне
Код:
id: root
width: 400
height: root.width


Название: Re: Динамическое увеличение размера окна.
Отправлено: folax от Январь 09, 2017, 20:12
Тот же результат. Мне кажется QQmlApplicationEngine не принимает размер от ApplicationWindow, жаль в нём нет методов для задания размеров. Будут ищё идеи ?


Название: Re: Динамическое увеличение размера окна.
Отправлено: Отражение луны от Январь 10, 2017, 21:15
Полагаю, нужно это: http://doc.qt.io/qt-5/qml-qtquick-controls-applicationwindow.html#contentItem-prop
Но проверять - не проверял.


Название: Re: Динамическое увеличение размера окна.
Отправлено: folax от Январь 11, 2017, 23:16
Полагаю, нужно это: http://doc.qt.io/qt-5/qml-qtquick-controls-applicationwindow.html#contentItem-prop
Но проверять - не проверял.

Не помогло.


Название: Re: Динамическое увеличение размера окна.
Отправлено: folax от Январь 11, 2017, 23:26
Попробовал эксперимент. Загрузил QML через QQuickView который имеет методы для задания ширины и длинны. Через void resizeEvent(QResizeEvent *ev) загоняю в QML root объект размеры окна QQuickView, потом модифицирую размер окна QQuickView, к примеру: если увеличиваем ширину то высота = ширине. И опять та же ситуация, окно вроде увеличивается, отпускаешь увеличение и идёт возврат на начальный размер. Больше нет вариантов, тему можно закрывать. Делаю графику фиксированных размеров.  Код с примером ниже, может кто то когда то доведёт дело до конца.

header

Код:
#include <QQuickView>
#include <QQuickItem>

class windowResize : public QQuickView
{
    Q_OBJECT

protected:
    void resizeEvent(QResizeEvent *ev)
    {
        QQuickItem* rootQml = rootObject();
        rootQml->setProperty("width", ev->size().width());
        rootQml->setProperty("height", ev->size().height());
        if(ev->oldSize().width() != ev->size().width())
            this->setHeight(this->width());
    }
};


source

Код:
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    windowResize view;
    view.setSource(QUrl(QStringLiteral("qrc:/main.qml")));
    view.show();

    return app.exec();
}

QML

Код:
Item
{
    id: root
    width: 400
    height: 400

    Rectangle
    {
        width: root.width
        height: root.height
        color: "red"
    }
}