Михаиллл
МихаилллТам. 14, 2019, 3:27 Т.Ж.

Как в QML красить в более чем 2 цвета?

Добрый день.
У меня есть календарь.
Мне нужно красить делегаты в 4 цвета, в зависимости от условий.
В этом коде хотел сделать окрашивание в 3 цвета, но в синий не красится, в 2 других цвета красится. Скажите пожалуйста, как добится нужного результата?

 color: model.date >= Date.fromLocaleString(Qt.locale(), AppCore.getDateOypr1(), "dd.MM.yyyy") && model.date <= Date.fromLocaleString(Qt.locale(), AppCore.getDateOypr2(), "dd.MM.yyyy") ? model.date ===  Date.fromLocaleString(Qt.locale(), AppCore.getDateOypr1(), "dd.MM.yyyy") ? "blue" : "gainsboro" : "white"
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

10
Evgenii Legotckoi
  • Там. 14, 2019, 3:35 Т.Ж.
  • (өңделген)

Добрый день.

Ну вы явно накосячили с записью условного выражения. Лучше перепишите это на использование функции. Я как бы за использования условных выражений. Но всё хорошо в меру, у вас например явно уже достаточно нечитаемая запись.

Насколько помню, у вас там делегат. Думаю, что можно записать так.

delegate: Item {
    Text {
        anchors.fill: parent

        function getColor(date) {
            if (date >= Date.fromLocaleString(Qt.locale(), AppCore.getDateOypr1(), "dd.MM.yyyy") && date <= Date.fromLocaleString(Qt.locale(), AppCore.getDateOypr2(), "dd.MM.yyyy"))
            {
                return "blue";
            }
            else if (date ===  Date.fromLocaleString(Qt.locale(), AppCore.getDateOypr1(), "dd.MM.yyyy"))
            {
                return "gainsboro";
            }
            return "white";
        }

        color: getColor(model.date)
    }
}

Заметьте, я написал код полностью с делегатом, чтобы было понятнее, что и куда писать. Обратите на это внимание.

    Evgenii Legotckoi
    • Там. 14, 2019, 3:42 Т.Ж.

    Немного поправил код

      Михаиллл
      • Там. 14, 2019, 4:15 Т.Ж.

      Сделал так, но все равно в синий не красит, в 2 других цвета красит. В первом уловие Date.fromLocaleString(Qt.locale(), AppCore.getDateOypr1(), "dd.MM.yyyy") срабатывает как нужно, а во 2 Date.fromLocaleString(Qt.locale(), AppCore.getDateOypr1(), "dd.MM.yyyy") почему-то не срабатывает.

                      function getColor(date) {
                          if (date > Date.fromLocaleString(Qt.locale(), AppCore.getDateOypr1(), "dd.MM.yyyy") && date < Date.fromLocaleString(Qt.locale(), AppCore.getDateOypr2(), "dd.MM.yyyy"))
                          {
                              return "gainsboro";
                          }
                          else if (date ===  Date.fromLocaleString(Qt.locale(), AppCore.getDateOypr1(), "dd.MM.yyyy"))
                          {
                              return "blue";
                          }
                          return "white";
                      }
                      color: getColor(model.date)
      
        Evgenii Legotckoi
        • Там. 14, 2019, 4:23 Т.Ж.
        • (өңделген)

        Сравните, что вообще возвращается в обоих вариантах, к тому же оператор === отличается от оператора ==

        Оператор === также сравнивает возвращаемые типы данных. Вполне возможно, что типы данных не совпадают.

        function getColor(date) {
            console.log(date,  Date.fromLocaleString(Qt.locale(), AppCore.getDateOypr1(), "dd.MM.yyyy"));
            if (date > Date.fromLocaleString(Qt.locale(), AppCore.getDateOypr1(), "dd.MM.yyyy") && date < Date.fromLocaleString(Qt.locale(), AppCore.getDateOypr2(), "dd.MM.yyyy"))
            {
              return "gainsboro";
            }
            else if (date ===  Date.fromLocaleString(Qt.locale(), AppCore.getDateOypr1(), "dd.MM.yyyy"))
            {
              return "blue";
            }
            return "white";
        }
        
          Михаиллл
          • Там. 14, 2019, 7:11 Т.Ж.
                              console.log( model.date )
                              console.log(Date.fromLocaleString(Qt.locale(), AppCore.getDateOypr1(), "dd.MM.yyyy"));
          

          возвращает:

          Invalid parameter passed to C runtime function.
          qml: Чт авг 15 03:00:00 2019 GMT+0300
          Invalid parameter passed to C runtime function.
          qml: Чт авг 15 00:00:00 2019 GMT+0300
          

          похоже разница в 03:00:00 и 00:00:00.
          Скажите пожалуйста, как это учесть и сделать так, что-бы это было равно?

            Михаиллл
            • Там. 14, 2019, 7:34 Т.Ж.

            Попробовал сделать так, но тоже нет результата

            else if (model.day == Date.fromLocaleString(Qt.locale(), AppCore.getDateOypr1(), "dd.MM.yyyy").getDate())/
            

            Хотя значения получаются одинаковые

              Михаиллл
              • Там. 14, 2019, 7:41 Т.Ж.

              И такой вариант почему то не работает

              else if (Qt.formatDate(model.date,"dd.MM.yyyy") ===  AppCore.getDateOypr1())
              

              хотя

                                  console.log(Qt.formatDate(model.date,"dd.MM.yyyy"))
                                  console.log(AppCore.getDateOypr1());
              

              возврощают

              qml: 15.08.2019
              qml: 15.08.2019
              
                Evgenii Legotckoi
                • Там. 14, 2019, 7:43 Т.Ж.
                • Жауап шешім ретінде белгіленді.

                Знаете, мне приходит на ум, что лучше сделать в AppCore какой-то метод, который будет принимать передаваемую дату и C++ части делать все необходимые проверки, а на выходе будет взвращать QString с нужным вам цветом. Там просто будет более контролируемое преобразование, которое будет проще привести к гарантированному результату.

                  Михаиллл
                  • Там. 14, 2019, 8:18 Т.Ж.

                  Переделал в c++, заработало. Странные баги в QML

                    Evgenii Legotckoi
                    • Там. 14, 2019, 8:20 Т.Ж.

                    Да это не столько баги QML, сколько поведение JavaScript, который используется в нём. Из-за отсутствия строгой типизации получаем некоторые проблемы с преобразованием типов. в итоге, на первый взгляд всё правильно, а типы данных не совпадают, в итоге не работает. Та ещё головная боль.

                      Пікірлер

                      Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                      Кіріңіз немесе Тіркеліңіз
                      AD

                      C++ - Тест 004. Указатели, Массивы и Циклы

                      • Нәтиже:50ұпай,
                      • Бағалау ұпайлары-4
                      m
                      • molni99
                      • Қаз. 26, 2024, 1:37 Т.Ж.

                      C++ - Тест 004. Указатели, Массивы и Циклы

                      • Нәтиже:80ұпай,
                      • Бағалау ұпайлары4
                      m
                      • molni99
                      • Қаз. 26, 2024, 1:29 Т.Ж.

                      C++ - Тест 004. Указатели, Массивы и Циклы

                      • Нәтиже:20ұпай,
                      • Бағалау ұпайлары-10
                      Соңғы пікірлер
                      ИМ
                      Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
                      Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                      Evgenii Legotckoi
                      Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
                      Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                      A
                      ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
                      Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                      ИМ
                      Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
                      Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                      d
                      dblas5Шілде 5, 2024, 11:02 Т.Ж.
                      QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                      Енді форумда талқылаңыз
                      m
                      moogoҚар. 22, 2024, 7:17 Т.Ж.
                      Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
                      Evgenii Legotckoi
                      Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
                      добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                      t
                      tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
                      google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                      NSProject
                      NSProjectМаусым 4, 2022, 3:49 Т.Ж.
                      Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

                      Бізді әлеуметтік желілерде бақылаңыз