11 августа 2019 г. 8:15

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

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

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
11
R

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

Не могу, 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

Тому що для календаря потрібний
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

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

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

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

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

MonthGrid {
    month: Calendar.December
    year: 2015
    locale: Qt.locale("en_US")
    delegate: Item {

        MouseArea {
            anchors.fill.parent
        }
    }
}

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

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

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

    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 = " )
            }
        }

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

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

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
  • 12 августа 2019 г. 3:06
  • (ред.)

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


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

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
D
16 августа 2019 г. 11:58
Damir

C++ - Тест 003. Условия и циклы

  • Результат:92баллов,
  • Очки рейтинга8
D
16 августа 2019 г. 11:46
Damir

C++ - Тест 005. Структуры и Классы

  • Результат:75баллов,
  • Очки рейтинга2
u
14 августа 2019 г. 13:55
unrealproro

C++ - Тест 005. Структуры и Классы

  • Результат:83баллов,
  • Очки рейтинга4
Последние комментарии
19 августа 2019 г. 6:41
Андрей Янкович

это проблема дистрибутива, попробуйте установить через пакетный менеджер snap Суть проблемы: libQt5Core которая лежит в дистрибутиве требует версию glibc >= 2.25 у вас видимо …
b
18 августа 2019 г. 5:09
bbb116

cqtdeployer /home/aleks/CQtDeployer/bin/cqtdeployer: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.25' not found (required by /home/aleks/CQtDeployer/lib/libQt5Core.so.5) linux mint …
D
17 августа 2019 г. 8:04
Damir

github ChekableTView Правой групповая смена значения при перетаскивании левой как обычно.
Сейчас обсуждают на форуме
20 августа 2019 г. 12:17
Евгений Легоцкой

Добрый день. Вы делаете некорректную попытку создать исключение. Исключения генерируются кодом, то есть любое исключение, которое вы перехватываете, всегда генерируется оператором th…
20 августа 2019 г. 11:44
Евгений Легоцкой

Ну вообще это я вам не решение вашей задачи кинул, а просто как пример... Регулярку вам надо было бы самому придумать.. Ну вот так будет работать TextField { validator: RegExpValida…
20 августа 2019 г. 8:04
IscanderChe

Ещё раз здравствуйте. Собираю Qt-проект с помощью CMake. Применяю к полученному exe-файлу windeployqt. В результате подцепляются почему-то dll-ки, оканчивающиеся в наименованиях на "d": Qt…
20 августа 2019 г. 7:46
IscanderChe

Да, с таргетом тоже работает. Спасибо!
20 августа 2019 г. 7:25
Евгений Легоцкой

вы можете испльзовать QList, просто помещайте туда QPair, будет примерно тоже самое. Просто QMap автоматически сортируется по ключу. QList<QPair<QString, QString>> list_with_pair;…
Ищу работу?
14,000.00 руб. - 40,000.00 руб.
Разработчик Qt
Annino, Moscow Oblast, Russia
5,000.00 руб. - 15,000.00 руб.
Дизайнер
Moskovskiy, Moscow, Russia
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы

EVILEG
О нас
Услуги
© EVILEG 2015-2019
Рекомендует хостинг TIMEWEB