Михаиллл
Михаиллл12. August 2019 09: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
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

13
Evgenii Legotckoi
  • 12. August 2019 09:41

Добрый день.

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

    Михаиллл
    • 12. August 2019 09:45
    • (bearbeitet)

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

      Evgenii Legotckoi
      • 12. August 2019 09: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. August 2019 09:55

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

          Михаиллл
          • 12. August 2019 10:23

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

            Михаиллл
            • 12. August 2019 10:25

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

              Evgenii Legotckoi
              • 12. August 2019 10:35

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

              console.log(getVector())
              

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

              MouseArea{
                  anchors.fill: parent
                  onClicked: console.log(getVector())
              }
              
                Михаиллл
                • 12. August 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. August 2019 12:16
                  • Die Antwort wurde als Lösung markiert.

                  Так работает

                  color: AppCore.getVectorDate().includes(model.day + "." + model.month + "." + model.year ) ? "green" : "red"
                  
                    Михаиллл
                    • 12. August 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. August 2019 15:13
                      • (bearbeitet)

                      Понял, из за месяев 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. Dezember 2019 05:36

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

                          Михаиллл
                          • 13. Dezember 2019 05:57

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

                            Kommentare

                            Nur autorisierte Benutzer können Kommentare posten.
                            Bitte Anmelden oder Registrieren
                            Letzte Kommentare
                            A
                            ALO1ZE19. Oktober 2024 08:19
                            Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                            ИМ
                            Игорь Максимов5. Oktober 2024 07:51
                            Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                            d
                            dblas55. Juli 2024 11:02
                            QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                            k
                            kmssr8. Februar 2024 18:43
                            Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                            Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                            Jetzt im Forum diskutieren
                            J
                            JacobFib17. Oktober 2024 03:27
                            добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
                            JW
                            Jhon Wick1. Oktober 2024 15:52
                            Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
                            КГ
                            Кирилл Гусарев27. September 2024 09:09
                            Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
                            F
                            Fynjy22. Juli 2024 04:15
                            при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

                            Folgen Sie uns in sozialen Netzwerken