x
xintrea4 декабря 2018 г. 20:55

Тупит QML на примитивном коде - что ему еще надо? (С видео)

qml, окно, координаты, размер

Сделал вот такой минимальный пример:

import QtQuick 2.6
import QtQuick.Window 2.2

Window {
    visible: true
    width: 500
    height: 500

    Rectangle
    {
        x: 0
        y: 0
        anchors.fill: parent
        color: "blue"
    }

    Rectangle
    {
        x: 0
        y: 0
        width: 100
        height: 100
        color: "red"
    }
}

Это просто окно с синим фоном и красным прямоугольником в левом верхнем углу.

Казалось бы, что тут может глючить? А глюки начинаются, когда меняется размер окна. Скриншоты сделать не могу, потому что в момент создания скриншота, окна, похоже, перерисовываются, и скриншот получается с «правильным» содержимым.

Поэтому выкладываю видео: https://youtu.be/0ewK6jrqWms

Видно, что если два раза нажать «Развернуть», то содержимое окна становится неправильным: синяя заливка начинается не сверху окна, а с каким-то вертикальным отступом. Красный квадрат тоже смещен вниз на этот же отступ.

Если двигать окно, то содержимое окна остается неправильным, но в какой-то момент вдруг перерисовывается, и снова становится правильным.

Вопрос: в чем проблема, и как сделать так, чтобы окно всегда отрисовывалось правильно? Это глюк на таком простом примере, а представьте что происходит в реальном проекте с кучей элементов с вычисляемыми размерами и масштабированием.
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

7
Виталий Антипов
  • 4 декабря 2018 г. 21:01

У меня то же самое. При большем количестве qml-объектов в окне отрисовывается все отлично, без глюков.

    x
    • 4 декабря 2018 г. 21:59

    > У меня то же самое


    У меня проблема возникает на Qt 5.9.2 и Qt 5.11.2 (инсталляция с qt.io сйта) в Debian Linux 9 Stable (LXDE).


    А у тебя в какой среде эта проблема?

      Виталий Антипов
      • 5 декабря 2018 г. 0:12

      Я не смогу емко ответить на ваш вопрос (быть может Евгений или кто-нибудь из опытных участников форума подскажет), с данным поведением отрисовки при ресайзе окна столкнулся еще в Qt 5.7, с тех пор вроде ничего не изменилось. Могу лишь сказать, что наблюдал и в Windows и в Ubuntu. Но при разработке интерфейса с добавлением большого количества элементов данная проблема пропадает, поэтому голову этим себе не забиваю.

        x
        • 5 декабря 2018 г. 0:34

        Как мы смогли выяснить в обсуждении на ЛОРе, достаточно добавить любую анимацию, и все становится правильным.

        https://www.linux.org.ru/forum/development/14650010


          Виталий Антипов
          • 5 декабря 2018 г. 0:51

          Попробовал ваш код под Windows на Qt 5.12 - этой проблемы не наблюдаю.

            Peter Mironychev
            • 5 декабря 2018 г. 2:09
            • (ред.)

            Мне кажется тут конфликт anchors.fill: parent и x-y, выберите либо одно, либо другое и вообще есть анкоры, не вижу смысла тут в x-y

              x
              • 5 декабря 2018 г. 14:59

              > Мне кажется тут конфликт anchors.fill: parent и x-y, выберите либо одно, либо другое и вообще есть анкоры, не вижу смысла тут в x-y


              Тут демонстрируется проблема и на анкорах, и на задании прямых координат. Это Linux-специфичная проблема, возникает на некоторых комбинациях KWin+KDE и Openbox+LXDE.

                Комментарии

                Только авторизованные пользователи могут публиковать комментарии.
                Пожалуйста, авторизуйтесь или зарегистрируйтесь
                Ua

                Qt - Тест 001. Сигналы и слоты

                • Результат:84баллов,
                • Очки рейтинга4
                Ua

                Qt - Тест 001. Сигналы и слоты

                • Результат:42баллов,
                • Очки рейтинга-8
                ОК

                Qt - Тест 001. Сигналы и слоты

                • Результат:47баллов,
                • Очки рейтинга-6
                Последние комментарии
                ИМ
                Игорь Максимов22 ноября 2024 г. 21:51
                Django - Урок 017. Кастомизированная страница авторизации на Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                Evgenii Legotckoi
                Evgenii Legotckoi31 октября 2024 г. 23:37
                Django - Урок 064. Как написать расширение для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                A
                ALO1ZE19 октября 2024 г. 17:19
                Читалка fb3-файлов на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                ИМ
                Игорь Максимов5 октября 2024 г. 16:51
                Django - Урок 064. Как написать расширение для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                d
                dblas55 июля 2024 г. 20:02
                QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                Сейчас обсуждают на форуме
                f
                firstlunoxod15 февраля 2025 г. 13:46
                Рисование на QGraphicsScene при зажатой кнопке мыши Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
                Дмитрий
                Дмитрий3 февраля 2025 г. 16:24
                Создание deb-пакета. Как создать ярлык на рабочем столе после установки собственного deb-пакета? Всем привет. Сделал свой deb-пакет с программой. Всё устанавливается и работает. Ставлю по пути /usr/bin/my_application. Как для пользователя при установке пакета сразу создать ярлык на раб…
                NW
                Nayo Wai30 января 2025 г. 19:22
                не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
                n
                nkly3 января 2025 г. 12:52
                Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
                M
                Marsel17 августа 2023 г. 0:26
                OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.

                Следите за нами в социальных сетях