Михаиллл
11 августа 2019 г. 19:15

Как в QML сделать календарь?

Добрый день.
Как в QML сделать календарь?
Это не подходит, т.к. использую QtQuick.Controls 2.12

4

Вам это нравится? Поделитесь в социальных сетях!

11
R
  • 11 августа 2019 г. 19:39
  • (ред.)

Так ви можите використовувати і 1.4 одночасно

    Михаиллл
    • 11 августа 2019 г. 20:12

    Не могу, qt так не работает.
    Если делаю так, то страничка не работает:

    1. import QtQuick 2.12
    2. import QtQuick.XmlListModel 2.12
    3. import QtQuick.Controls 2.12
    4. import AppCore 1.0
    5. import QtQuick.Controls 1.12
      R
      • 11 августа 2019 г. 21:37

      Тому що для календаря потрібний
      import QtQuick.Controls 1.4
      Якщо в файлі нічого специфічного не використовується то можна просто замінити версію, а якщо ніяк то або винести календар в окремий файл а потім підключити його, або... Вроді так теж має працювати
      import QtQuick.Controls 1.4 as Controlold

      Controlold.Calendar {
      minimumDate: new Date(2017, 0, 1)
      maximumDate: new Date(2018, 0, 1)
      }

      Краще ще почитати
      https://doc.qt.io/qt-5/qtqml-syntax-imports.html

        Evgenii Legotckoi
        • 11 августа 2019 г. 22:32

        к слову говоря есть и для вторых контролов какие-то наработки по календарю.

        https://doc.qt.io/archives/qt-5.7/qt-labs-calendar2-qmlmodule.html

          Михаиллл
          • 11 августа 2019 г. 23:33

          С помощью этого получилось вставить календарь. Но как прикрутить подсветку и маусареи к нужным дням?

            Evgenii Legotckoi
            • 12 августа 2019 г. 0:08
            • (ред.)

            Можете сделать это с помощью делегата. Предполагаю, что это можно сделать примерно так

            1. MonthGrid {
            2. month: Calendar.December
            3. year: 2015
            4. locale: Qt.locale("en_US")
            5. delegate: Item {
            6.  
            7. MouseArea {
            8. anchors.fill.parent
            9. }
            10. }
            11. }
              Михаиллл
              • 12 августа 2019 г. 0:56

              Но мне нужно привязать к дням месяца, а не ко всему месяцу.

                Evgenii Legotckoi
                • 12 августа 2019 г. 1:20

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

                  Михаиллл
                  • 12 августа 2019 г. 2:45

                  Если так добавляю делегата, то календарь перестает отображаться. Скажите пожалуйста, почему так и как исправить?

                  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. MouseArea{
                  13. anchors.fill: parent
                  14. //onClicked: console.log("day = " )
                  15. }
                  16. }
                    Evgenii Legotckoi
                    • 12 августа 2019 г. 3:21
                    • Ответ был помечен как решение.

                    Ну потому, что делегат отвечает за представление одного элемента модели, когда вы его переопределяете, то вам нужно полностью написать его вёрстку. Естественно, что у вас ничего не отображается в этом случае, поскольку вы не написали, что отображать в делегате. Делегат - это внешний вид одной ячейки даты календаря, если вы не указываете нигде текст ячейки, то и не увидите его.

                    Вот рабочий код

                    1. import QtQuick 2.12
                    2. import QtQuick.Window 2.12
                    3. import Qt.labs.calendar 1.0
                    4.  
                    5. Window {
                    6. visible: true
                    7. width: 640
                    8. height: 480
                    9. title: qsTr("Hello World")
                    10.  
                    11.  
                    12. MonthGrid {
                    13. id: mothGrid1
                    14. month: Calendar.December
                    15. year: 2019
                    16. x: 20
                    17. y: 20
                    18. width: 340
                    19. height: 355
                    20.  
                    21. delegate: Item {
                    22. Text {
                    23. anchors.fill: parent
                    24. text: model.day
                    25. }
                    26. MouseArea{
                    27. anchors.fill: parent
                    28. }
                    29. }
                    30. }
                    31. }
                    32.  

                    Вообще, вы можете использовать такое обращение к данным модели

                    • model.date : date The date of the cell
                    • model.day : int The number of the day
                    • model.today : bool Whether the delegate represents today
                    • model.weekNumber : int The week number
                    • model.month : int The number of the month
                    • model.year : int The number of the year
                      Pavel K.
                      • 12 августа 2019 г. 14:06
                      • (ред.)

                      в самом Qt есть пример календаря (welcome->examples->Calendar Widget Example)


                      есть и тут пример

                        Комментарии

                        Только авторизованные пользователи могут публиковать комментарии.
                        Пожалуйста, авторизуйтесь или зарегистрируйтесь