Михаиллл
Михаиллл12 августа 2019 г. 9:39

Как в QML изменить в календаре дизайн дней

Добрый день.
У меня есть такой календарь.
У меня есть вектор с датами, как подсвечивать в календаре только нужные даты из вектора?

    MonthGrid {
        id: mothGrid1
        month: Calendar.December
        year: 2019
        x: 23
        y: 154
        width: 340
        height: 355
        //locale: Qt.locale("en_US")

        delegate: Item {
            Rectangle{
                anchors.fill: parent
                color: "green"
            }
            Text {
                anchors.horizontalCenter: parent.horizontalCenter
                anchors.verticalCenter: parent.verticalCenter
                text: model.day
            }

            MouseArea{
                anchors.fill: parent
                //onClicked: console.log(model.date )
            }
        }
    }
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

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

13
Evgenii Legotckoi
  • 12 августа 2019 г. 9:41

Добрый день.

Не вижу в вашем коде вектора с датами. Затруднительно что-то подсказать в таком случае.

    Михаиллл
    • 12 августа 2019 г. 9:45
    • (ред.)

    Он просто в с++ слое, там обычный вектор с обычными датами в формате QDate. Это аналогично любому массиву.
    Видимо нужно перебирать модель, но как к ней обратится?

      Evgenii Legotckoi
      • 12 августа 2019 г. 9:52

      Вы же понимаете, что данные нужно передать в QML, чтобы с ними было можно как-то оперировать?
      А вы говорите, у меня есть какой-то вектор, где-то в С++, как в соответствии с этим вектором отметить даты в календаре в QML.

      У вас есть хоть какой-то способ достать этот вектор? Обращение к классу, который содержит этот вектор, или модель данных, или ещё что-то?

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

      Text {
          anchors.horizontalCenter: parent.horizontalCenter
          anchors.verticalCenter: parent.verticalCenter
          text: model.day
          color: model.day == 10 ? "red" : "green"
      }
      

      Так у вас будет выделяться 10-й день. А в остальном тут даже не подскажешь, если иметь абстрактный вектор в C++.

        Evgenii Legotckoi
        • 12 августа 2019 г. 9:55

        То есть нужно перебирать не модель. А сам вектор. Если вы его достанете из C++, то сможете прямо в делегате что-нибудь придумать, но что конкретно, не знаю.

          Михаиллл
          • 12 августа 2019 г. 10:23

          Я доставляю его в делегат методом getVector(). Но как его перебирать в делегате? Разве перебор не делают в модели?

            Михаиллл
            • 12 августа 2019 г. 10:25

            Можно ли как то прописать немного отдельно модель календаря и потом с ней работать?

              Evgenii Legotckoi
              • 12 августа 2019 г. 10:35

              Можете показать, как вы используете этот getVector() и допустим вариант с выводом в консоль в QML.

              console.log(getVector())
              

              Я хотел бы понять, как это у вас вообще сделано или работает ли. Например, хотя бы по клику по ячейке.

              MouseArea{
                  anchors.fill: parent
                  onClicked: console.log(getVector())
              }
              
                Михаиллл
                • 12 августа 2019 г. 11:00

                Ошибся, QML не знает QDate, мой метод возвращает QString так:

                console.log("AppCore.getVectorDate() " + AppCore.getVectorDate() )
                

                qml: AppCore.getVectorDate() 12.08.2019,13.08.2019,14.08.2019,15.08.2019,16.08.2019,17.08.2019,18.08.2019,19.08.2019,20.08.2019,21.08.2019,22.08.2019,23.08.2019,24.08.2019,26.08.2019,27.08.2019,29.08.2019,30.08.2019,31.08.2019,01.09.2019,02.09.2019,03.09.2019,04.09.2019,05.09.2019,06.09.2019,07.09.2019,08.09.2019,09.09.2019,10.09.2019,11.09.2019,12.09.2019,13.09.2019,14.09.2019,15.09.2019,16.09.2019,17.09.2019,18.09.2019,19.09.2019,20.09.2019,21.09.2019,22.09.2019,23.09.2019,24.09.2019,25.09.2019,26.09.2019,27.09.2019,28.09.2019,29.09.2019,30.09.2019,01.10.2019,02.10.2019,03.10.2019,04.10.2019,05.10.2019,06.10.2019,07.10.2019,08.10.2019,09.10.2019,10.10.2019,11.10.2019,12.10.2019,13.10.2019,14.10.2019,15.10.2019,16.10.2019,17.10.2019,18.10.2019,19.10.2019,20.10.2019,21.10.2019,22.10.2019,23.10.2019,24.10.2019,25.10.2019,26.10.2019,27.10.2019,28.10.2019,29.10.2019,30.10.2019,31.10.2019,01.11.2019,02.11.2019,03.11.2019,04.11.2019,05.11.2019,06.11.2019,07.11.2019,08.11.2019,09.11.2019,10.11.2019,11.11.2019,12.11.2019,13.11.2019,14.11.2019,15.11.2019,16.11.2019,17.11.2019,18.11.2019,19.11.2019,20.11.2019,21.11.2019,22.11.2019,23.11.2019,24.11.2019,25.11.2019,26.11.2019,27.11.2019,28.11.2019,29.11.2019,30.11.2019,02.12.2019,03.12.2019,04.12.2019,05.12.2019,06.12.2019,07.12.2019,08.12.2019,09.12.2019,10.12.2019,11.12.2019,12.12.2019,13.12.2019,14.12.2019,15.12.2019,16.12.2019,17.12.2019,18.12.2019,19.12.2019,20.12.2019,21.12.2019,22.12.2019,23.12.2019,24.12.2019,25.12.2019,26.12.2019,27.12.2019,28.12.2019,29.12.2019,30.12.2019,31.12.2019,02.01.2020,04.01.2020,06.01.2020,09.01.2020,11.01.2020,13.01.2020,16.01.2020,18.01.2020,20.01.2020,23.01.2020,25.01.2020,27.01.2020,30.01.2020,01.02.2020,03.02.2020,06.02.2020,08.02.2020,10.02.2020,13.02.2020,15.02.2020,17.02.2020,20.02.2020,22.02.2020,24.02.2020,02.03.2020,05.03.2020,07.03.2020,09.03.2020,12.03.2020,14.03.2020,21.03.2020,23.03.2020,26.03.2020,13.04.2020,14.04.2020,16.04.2020,18.04.2020,16.07.2020

                  Михаиллл
                  • 12 августа 2019 г. 12:16
                  • Ответ был помечен как решение.

                  Так работает

                  color: AppCore.getVectorDate().includes(model.day + "." + model.month + "." + model.year ) ? "green" : "red"
                  
                    Михаиллл
                    • 12 августа 2019 г. 15:10

                    Сделал так, но почему-то для августа и сентября не срабатывает подкрашивание, но для остальных месяцев срабатывает срабатывает. Скажите пожалуйста, почему такое может быть?

                        MonthGrid {
                            id: mothGrid1
                            month: 7//Calendar.December
                            year: 2019
                            x: 23
                            y: 154
                            width: 340
                            height: 355
                            //locale: Qt.locale("en_US")
                    
                            delegate: Item {
                                Rectangle{
                                    anchors.fill: parent
                                    color: AppCore.getVectorDate().includes(model.day + "." + (model.month +1 ) + "." + model.year ) ? "green" : "red"
                                }
                                Text {
                                    anchors.horizontalCenter: parent.horizontalCenter
                                    anchors.verticalCenter: parent.verticalCenter
                                    text: model.day
                                }
                    
                                MouseArea{
                                    anchors.fill: parent
                                    onClicked: {
                                        console.log(model.day + "." + (model.month +1 ) + "." + model.year )
                                        //console.log(AppCore.getVectorDate() )
                                    }
                                }
                            }
                        }
                    
                      Михаиллл
                      • 12 августа 2019 г. 15:13
                      • (ред.)

                      Понял, из за месяев 08, 09. Так работает

                      color: AppCore.getVectorDate().includes(model.day + "." + (model.month +1 ) + "." + model.year ) || AppCore.getVectorDate().includes(model.day + "." + 0+(model.month +1 ) + "." + model.year ) ?  "green" : "red"
                      
                        U
                        • 13 декабря 2019 г. 5:36

                        а как сделать чтоб на какой-то одной ячейке календаря был виден условный Rectangle, а на других нет. Вот типа есть в делегате дня в углу красный квадратик(типа метка), я хочу чтоб он был виден только на 4 дне месяца. Как сделать чтоб Rectangle.visible было true только в ячейке 4го дня?

                          Михаиллл
                          • 13 декабря 2019 г. 5:57

                          Тогда нужно все делегаты сделать прозрачными кромк одного.

                            Комментарии

                            Только авторизованные пользователи могут публиковать комментарии.
                            Пожалуйста, авторизуйтесь или зарегистрируйтесь
                            г
                            • ги
                            • 23 апреля 2024 г. 15:51

                            C++ - Тест 005. Структуры и Классы

                            • Результат:41баллов,
                            • Очки рейтинга-8
                            l
                            • laei
                            • 23 апреля 2024 г. 9:19

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

                            • Результат:10баллов,
                            • Очки рейтинга-10
                            l
                            • laei
                            • 23 апреля 2024 г. 9:17

                            C++ - Тест 003. Условия и циклы

                            • Результат:50баллов,
                            • Очки рейтинга-4
                            Последние комментарии
                            k
                            kmssr8 февраля 2024 г. 18:43
                            Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                            АК
                            Анатолий Кононенко5 февраля 2024 г. 1:50
                            Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                            EVA
                            EVA25 декабря 2023 г. 10:30
                            Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
                            J
                            JonnyJo25 декабря 2023 г. 8:38
                            Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
                            G
                            Gvozdik18 декабря 2023 г. 21:01
                            Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
                            Сейчас обсуждают на форуме
                            G
                            Gar22 апреля 2024 г. 5:46
                            Clipboard Как скопировать окно целиком в clipb?
                            DA
                            Dr Gangil Academics20 апреля 2024 г. 7:45
                            Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
                            a
                            a_vlasov14 апреля 2024 г. 6:41
                            Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
                            Павел Дорофеев
                            Павел Дорофеев14 апреля 2024 г. 2:35
                            QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
                            f
                            fastrex4 апреля 2024 г. 4:47
                            Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…

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