Михаиллл
МихаилллAug. 11, 2019, 9:15 a.m.

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

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

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!

11
R
  • Aug. 11, 2019, 9:39 a.m.
  • (edited)

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

    Михаиллл
    • Aug. 11, 2019, 10:12 a.m.

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

    import QtQuick 2.12
    import QtQuick.XmlListModel 2.12
    import QtQuick.Controls 2.12
    import AppCore 1.0
    import QtQuick.Controls 1.12
    
      R
      • Aug. 11, 2019, 11:37 a.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, 12:32 p.m.

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

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

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

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

            Evgenii Legotckoi
            • Aug. 11, 2019, 2:08 p.m.
            • (edited)

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

            MonthGrid {
                month: Calendar.December
                year: 2015
                locale: Qt.locale("en_US")
                delegate: Item {
            
                    MouseArea {
                        anchors.fill.parent
                    }
                }
            }
            
              Михаиллл
              • Aug. 11, 2019, 2:56 p.m.

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

                Evgenii Legotckoi
                • Aug. 11, 2019, 3:20 p.m.

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

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

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

                      MonthGrid {
                          id: mothGrid1
                          month: Calendar.December
                          year: 2019
                          x: 23
                          y: 154
                          width: 340
                          height: 355
                          //locale: Qt.locale("en_US")
                  
                          delegate: Item {
                              MouseArea{
                                  anchors.fill: parent
                                  //onClicked: console.log("day = " )
                              }
                          }
                  
                    Evgenii Legotckoi
                    • Aug. 11, 2019, 5:21 p.m.
                    • The answer was marked as a solution.

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

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

                    import QtQuick 2.12
                    import QtQuick.Window 2.12
                    import Qt.labs.calendar 1.0
                    
                    Window {
                        visible: true
                        width: 640
                        height: 480
                        title: qsTr("Hello World")
                    
                    
                        MonthGrid {
                            id: mothGrid1
                            month: Calendar.December
                            year: 2019
                            x: 20
                            y: 20
                            width: 340
                            height: 355
                    
                            delegate: Item {
                                Text {
                                    anchors.fill: parent
                                    text: model.day
                                }
                                MouseArea{
                                    anchors.fill: parent
                                }
                            }
                        }
                    }
                    
                    

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

                    • 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, 4:06 a.m.
                      • (edited)

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


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

                        Comments

                        Only authorized users can post comments.
                        Please, Log in or Sign up
                        B

                        C++ - Test 002. Constants

                        • Result:16points,
                        • Rating points-10
                        B

                        C++ - Test 001. The first program and data types

                        • Result:46points,
                        • Rating points-6
                        FL

                        C++ - Test 006. Enumerations

                        • Result:80points,
                        • Rating points4
                        Last comments
                        k
                        kmssrFeb. 8, 2024, 3:43 p.m.
                        Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                        Qt WinAPI - Lesson 007. Working with ICMP Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                        EVA
                        EVADec. 25, 2023, 7:30 a.m.
                        Boost - static linking in CMake project under Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
                        J
                        JonnyJoDec. 25, 2023, 5:38 a.m.
                        Boost - static linking in CMake project under Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
                        G
                        GvozdikDec. 18, 2023, 6:01 p.m.
                        Qt/C++ - Lesson 056. Connecting the Boost library in Qt for MinGW and MSVC compilers Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
                        Now discuss on the forum
                        AC
                        Alexandru CodreanuJan. 19, 2024, 8:57 a.m.
                        QML Обнулить значения SpinBox Доброго времени суток, не могу разобраться с обнулением значение SpinBox находящего в делегате. import QtQuickimport QtQuick.ControlsWindow { width: 640 height: 480 visible: tr…
                        BlinCT
                        BlinCTDec. 27, 2023, 5:57 a.m.
                        Растягивать Image на парент по высоте Ну и само собою дял включения scrollbar надо чтобы был Flickable. Так что выходит как то так Flickable{ id: root anchors.fill: parent clip: true property url linkFile p…
                        Дмитрий
                        ДмитрийJan. 10, 2024, 1:18 a.m.
                        Qt Creator загружает всю оперативную память Проблема решена. Удалось разобраться с помощью утилиты strace. Запустил ее: strace ./qtcreator Начал выводиться весь лог работы креатора. В один момент он начал считывать фай…
                        Evgenii Legotckoi
                        Evgenii LegotckoiDec. 12, 2023, 3:48 a.m.
                        Побуквенное сравнение двух строк Добрый день. Там случайно не высылается этот сигнал textChanged ещё и при форматировани текста? Если решиать в лоб, то можно просто отключать сигнал/слотовое соединение внутри слота и …

                        Follow us in social networks