Михаиллл
Михаиллл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

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

                            Комментарии

                            Только авторизованные пользователи могут публиковать комментарии.
                            Пожалуйста, авторизуйтесь или зарегистрируйтесь
                            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
                            Последние комментарии
                            i
                            innorwall11 ноября 2024 г. 22:12
                            Django - Урок 055. Как написать функционал auto populate field Freckles because of several brand names retin a, atralin buy generic priligy
                            i
                            innorwall11 ноября 2024 г. 18:23
                            QML - Урок 035. Использование перечислений в QML без C++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
                            i
                            innorwall11 ноября 2024 г. 15:50
                            Qt/C++ - Урок 052. Кастомизация Qt Аудио плеера в стиле AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
                            i
                            innorwall11 ноября 2024 г. 14:19
                            Алгоритм сортировки кучей The role of raloxifene in preventing breast cancer priligy precio
                            i
                            innorwall11 ноября 2024 г. 13:55
                            PyQt5 - Урок 006. Работа с QTableWidget buy priligy 60 mg 53 have been reported by Javanovic Santa et al
                            Сейчас обсуждают на форуме
                            i
                            innorwall11 ноября 2024 г. 20:56
                            добавить qlineseries в функции buy priligy senior brother Chu He, whom he had known for many years
                            i
                            innorwall11 ноября 2024 г. 10:55
                            Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
                            9
                            9Anonim25 октября 2024 г. 9:10
                            Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
                            ИМ
                            Игорь Максимов3 октября 2024 г. 4:05
                            Реализация навигации по разделам Спасибо Евгений!

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