Михаиллл
Aug. 12, 2019, 7:39 p.m.

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

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

  1. MonthGrid {
  2. id: mothGrid1
  3. month: Calendar.December
  4. year: 2019
  5. x: 23
  6. y: 154
  7. width: 340
  8. height: 355
  9. //locale: Qt.locale("en_US")
  10.  
  11. delegate: Item {
  12. Rectangle{
  13. anchors.fill: parent
  14. color: "green"
  15. }
  16. Text {
  17. anchors.horizontalCenter: parent.horizontalCenter
  18. anchors.verticalCenter: parent.verticalCenter
  19. text: model.day
  20. }
  21.  
  22. MouseArea{
  23. anchors.fill: parent
  24. //onClicked: console.log(model.date )
  25. }
  26. }
  27. }
3

Do you like it? Share on social networks!

13
Evgenii Legotckoi
  • Aug. 12, 2019, 7:41 p.m.

Добрый день.

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

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

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

      Evgenii Legotckoi
      • Aug. 12, 2019, 7:52 p.m.

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

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

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

      1. Text {
      2. anchors.horizontalCenter: parent.horizontalCenter
      3. anchors.verticalCenter: parent.verticalCenter
      4. text: model.day
      5. color: model.day == 10 ? "red" : "green"
      6. }

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

        Evgenii Legotckoi
        • Aug. 12, 2019, 7:55 p.m.

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

          Михаиллл
          • Aug. 12, 2019, 8:23 p.m.

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

            Михаиллл
            • Aug. 12, 2019, 8:25 p.m.

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

              Evgenii Legotckoi
              • Aug. 12, 2019, 8:35 p.m.

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

              1. console.log(getVector())

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

              1. MouseArea{
              2. anchors.fill: parent
              3. onClicked: console.log(getVector())
              4. }
                Михаиллл
                • Aug. 12, 2019, 9 p.m.

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

                1. 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, 10:16 p.m.
                  • The answer was marked as a solution.

                  Так работает

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

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

                    1. MonthGrid {
                    2. id: mothGrid1
                    3. month: 7//Calendar.December
                    4. year: 2019
                    5. x: 23
                    6. y: 154
                    7. width: 340
                    8. height: 355
                    9. //locale: Qt.locale("en_US")
                    10.  
                    11. delegate: Item {
                    12. Rectangle{
                    13. anchors.fill: parent
                    14. color: AppCore.getVectorDate().includes(model.day + "." + (model.month +1 ) + "." + model.year ) ? "green" : "red"
                    15. }
                    16. Text {
                    17. anchors.horizontalCenter: parent.horizontalCenter
                    18. anchors.verticalCenter: parent.verticalCenter
                    19. text: model.day
                    20. }
                    21.  
                    22. MouseArea{
                    23. anchors.fill: parent
                    24. onClicked: {
                    25. console.log(model.day + "." + (model.month +1 ) + "." + model.year )
                    26. //console.log(AppCore.getVectorDate() )
                    27. }
                    28. }
                    29. }
                    30. }
                      Михаиллл
                      • Aug. 13, 2019, 1:13 a.m.
                      • (edited)

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

                      1. 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, 4:36 p.m.

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

                          Михаиллл
                          • Dec. 13, 2019, 4:57 p.m.

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

                            Comments

                            Only authorized users can post comments.
                            Please, Log in or Sign up
                            • Last comments
                            • AK
                              April 1, 2025, 11:41 a.m.
                              Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
                            • Evgenii Legotckoi
                              March 9, 2025, 9:02 p.m.
                              К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
                            • VP
                              March 9, 2025, 4:14 p.m.
                              Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
                            • ИМ
                              Nov. 22, 2024, 9:51 p.m.
                              Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                            • Evgenii Legotckoi
                              Oct. 31, 2024, 11:37 p.m.
                              Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup