Михаиллл
МихаилллAug. 12, 2019, 7:39 p.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, 7:41 p.m.

Добрый день.

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

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

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

      Evgenii Legotckoi
      • Aug. 12, 2019, 7:52 p.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, 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.

              console.log(getVector())
              

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

              MouseArea{
                  anchors.fill: parent
                  onClicked: console.log(getVector())
              }
              
                Михаиллл
                • Aug. 12, 2019, 9 p.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, 10:16 p.m.
                  • The answer was marked as a solution.

                  Так работает

                  color: AppCore.getVectorDate().includes(model.day + "." + model.month + "." + model.year ) ? "green" : "red"
                  
                    Михаиллл
                    • Aug. 13, 2019, 1:10 a.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. 13, 2019, 1:13 a.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, 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
                            Ua

                            Qt - Test 001. Signals and slots

                            • Result:84points,
                            • Rating points4
                            Ua

                            Qt - Test 001. Signals and slots

                            • Result:42points,
                            • Rating points-8
                            ОК

                            Qt - Test 001. Signals and slots

                            • Result:47points,
                            • Rating points-6
                            Last comments
                            ИМ
                            Игорь МаксимовNov. 22, 2024, 9:51 p.m.
                            Django - Tutorial 017. Customize the login page to Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                            Evgenii Legotckoi
                            Evgenii LegotckoiOct. 31, 2024, 11:37 p.m.
                            Django - Lesson 064. How to write a Python Markdown extension Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                            A
                            ALO1ZEOct. 19, 2024, 5:19 p.m.
                            Fb3 file reader on Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                            ИМ
                            Игорь МаксимовOct. 5, 2024, 4:51 p.m.
                            Django - Lesson 064. How to write a Python Markdown extension Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                            d
                            dblas5July 5, 2024, 8:02 p.m.
                            QML - Lesson 016. SQLite database and the working with it in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                            Now discuss on the forum
                            f
                            firstlunoxodFeb. 15, 2025, 1:46 p.m.
                            Рисование на QGraphicsScene при зажатой кнопке мыши Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
                            Дмитрий
                            ДмитрийFeb. 3, 2025, 4:24 p.m.
                            Создание deb-пакета. Как создать ярлык на рабочем столе после установки собственного deb-пакета? Всем привет. Сделал свой deb-пакет с программой. Всё устанавливается и работает. Ставлю по пути /usr/bin/my_application. Как для пользователя при установке пакета сразу создать ярлык на раб…
                            NW
                            Nayo WaiJan. 30, 2025, 7:22 p.m.
                            не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
                            n
                            nklyJan. 3, 2025, 12:52 p.m.
                            Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
                            M
                            MarselAug. 17, 2023, 12:26 a.m.
                            OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.

                            Follow us in social networks