Михаиллл
МихаилллAug. 12, 2019, 9:39 a.m.

Как в 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 )
            }
        }
    }
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

13
Evgenii Legotckoi
  • Aug. 12, 2019, 9:41 a.m.

Добрый день.

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

    Михаиллл
    • Aug. 12, 2019, 9:45 a.m.
    • (edited)

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

      Evgenii Legotckoi
      • Aug. 12, 2019, 9:52 a.m.

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

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

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

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

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

        Evgenii Legotckoi
        • Aug. 12, 2019, 9:55 a.m.

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

          Михаиллл
          • Aug. 12, 2019, 10:23 a.m.

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

            Михаиллл
            • Aug. 12, 2019, 10:25 a.m.

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

              Evgenii Legotckoi
              • Aug. 12, 2019, 10:35 a.m.

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

              console.log(getVector())
              

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

              MouseArea{
                  anchors.fill: parent
                  onClicked: console.log(getVector())
              }
              
                Михаиллл
                • Aug. 12, 2019, 11 a.m.

                Ошибся, 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

                  Михаиллл
                  • Aug. 12, 2019, 12:16 p.m.
                  • The answer was marked as a solution.

                  Так работает

                  color: AppCore.getVectorDate().includes(model.day + "." + model.month + "." + model.year ) ? "green" : "red"
                  
                    Михаиллл
                    • Aug. 12, 2019, 3:10 p.m.

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

                        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() )
                                    }
                                }
                            }
                        }
                    
                      Михаиллл
                      • Aug. 12, 2019, 3:13 p.m.
                      • (edited)

                      Понял, из за месяев 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
                        • Dec. 13, 2019, 5:36 a.m.

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

                          Михаиллл
                          • Dec. 13, 2019, 5:57 a.m.

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

                            Comments

                            Only authorized users can post comments.
                            Please, Log in or Sign up
                            l
                            • laei
                            • April 23, 2024, 3:19 p.m.

                            C ++ - Test 004. Pointers, Arrays and Loops

                            • Result:10points,
                            • Rating points-10
                            l
                            • laei
                            • April 23, 2024, 3:17 p.m.

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

                            • Result:50points,
                            • Rating points-4
                            e
                            • ehot
                            • March 31, 2024, 8:29 p.m.

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

                            • Result:78points,
                            • Rating points2
                            Last comments
                            k
                            kmssrFeb. 9, 2024, 12:43 a.m.
                            Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                            Qt WinAPI - Lesson 007. Working with ICMP Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                            EVA
                            EVADec. 25, 2023, 4:30 p.m.
                            Boost - static linking in CMake project under Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
                            J
                            JonnyJoDec. 25, 2023, 2:38 p.m.
                            Boost - static linking in CMake project under Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
                            G
                            GvozdikDec. 19, 2023, 3:01 a.m.
                            Qt/C++ - Lesson 056. Connecting the Boost library in Qt for MinGW and MSVC compilers Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
                            Now discuss on the forum
                            G
                            GarApril 22, 2024, 11:46 a.m.
                            Clipboard Как скопировать окно целиком в clipb?
                            DA
                            Dr Gangil AcademicsApril 20, 2024, 1:45 p.m.
                            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_vlasovApril 14, 2024, 12:41 p.m.
                            Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
                            Павел Дорофеев
                            Павел ДорофеевApril 14, 2024, 8:35 a.m.
                            QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
                            f
                            fastrexApril 4, 2024, 10:47 a.m.
                            Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…

                            Follow us in social networks