Михаиллл
Aug. 11, 2019, 7:15 p.m.

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

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

4

Do you like it? Share on social networks!

11
R
  • Aug. 11, 2019, 7:39 p.m.
  • (edited)

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

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

    Не могу, 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
      • Aug. 11, 2019, 9:37 p.m.

      Тому що для календаря потрібний
      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
        • Aug. 11, 2019, 10:32 p.m.

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

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

          Михаиллл
          • Aug. 11, 2019, 11:33 p.m.

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

            Evgenii Legotckoi
            • Aug. 12, 2019, 12:08 a.m.
            • (edited)

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

            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. }
              Михаиллл
              • Aug. 12, 2019, 12:56 a.m.

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

                Evgenii Legotckoi
                • Aug. 12, 2019, 1:20 a.m.

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

                  Михаиллл
                  • Aug. 12, 2019, 2:45 a.m.

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

                  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
                    • Aug. 12, 2019, 3:21 a.m.
                    • The answer was marked as a solution.

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

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

                    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.
                      • Aug. 12, 2019, 2:06 p.m.
                      • (edited)

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


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

                        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