РС
Руслан СклюевМаусым 20, 2020, 3:55 Т.Қ.

QML DATAEDIT

Здравствуйте, какой элемент QML можно использовать под редактирование даты? Мне нужен простой Edit, чтобы пользователь ввел 21052020 и ему автоматический точки расставились, т.е. стало 21.05.2020 и дальше не позволяло вводить. Я так понимаю, что это самому через функции нужно?
Функцию получении даты сделал.

 function addZero(value){
        if(value<10){
            return '0' + value
        }
        else{
            return value
        }
    }

    function getFormat(date){
        var year = date.getFullYear()
        var month = date.getMonth()
        var day = date.getDate()

        return addZero(day) + '.' + addZero(month+1) + '.' + year
    }
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

6
РС
  • Маусым 20, 2020, 7:26 Т.Қ.

Сделал элемент, все вводится. Осталось только проверить дату на корректность. Как быть? Есть метод isValid, но он почему-то работать не хочет.

import QtQuick 2.0
import QtQuick.Controls 1.4

Item {
    id: dateEdit

    readonly property date currentDate: calendar.selectedDate
    readonly property bool isCalendarOpened: calendar.visible
    property string color: "lightblue"

    signal calendarOpened;
    signal calendarClosed;

    width: textField.width + btnOpen.width
    height: textField.height

    Column {
        id: column
        spacing: 2

        Row {
            spacing: 5
            TextField {
                id: textField
                text: Qt.formatDate(calendar.selectedDate, "dd.MM.yyyy");
//                readOnly: true
                Keys.onPressed:
                  {
                    if (text.isValid()) {
                        console.log ( "Date " + " is a valid date")
                    } else {
                         console.log ("Date " + " is not a valid date")
                    }
                    console.log("Press = " + event.key)
                    console.log("Current text is " + text)
                  }
                  Keys.onReleased:
                  { text: "99.99.9999"
                    console.log("Release = " + event.key)
                    console.log("Current text is " + text)
                  }
               inputMask: "99.99.9999"
                inputMethodHints: Qt.ImhDigitsOnly
                Keys.onUpPressed:  calendar.__selectNextDay()
                Keys.onDownPressed: calendar.__selectPreviousDay()
            }
            Rectangle {
                id: btnOpen
                radius: 5
                width: 30
                height: textField.height
                color: dateEdit.color

                Text {
                    text: "*"
                }

                MouseArea {
                    anchors.fill: parent

                    onClicked: {
                        dateEdit.isCalendarOpened ?  closeCalendar() : openCalendar()
                    }
                }
            }
        }

        Calendar {
            id: calendar
            visible: false
            dayOfWeekFormat: Locale.ShortFormat
            onClicked: {
                closeCalendar()
            }

            function open()
            {
                visible = true
            }

            function close()
            {
                visible = false
            }
        }
    }

    function openCalendar()
    {
        calendar.open()
        calendarOpened()
    }

    function closeCalendar()
    {
        calendar.close()
        calendarClosed()
    }
}

    РС
    • Маусым 21, 2020, 1:32 Т.Ж.
    • (өңделген)

    Доделал, но остался единственный баг с месяцами: число он нормально отрабатывает, а если ввожу месяц и стоит 06, то получается 16, то он сбрасывается. Как исправить?

    import QtQuick 2.0
    import QtQuick.Controls 1.4
    
    
    
    
    
    Item {
        id: dateEdit
    
        readonly property date currentDate: calendar.selectedDate
        readonly property bool isCalendarOpened: calendar.visible
        property string color: "lightblue"
    
        signal calendarOpened;
        signal calendarClosed;
    
        width: textField.width + btnOpen.width
        height: textField.height
    
        Column {
            id: column
            spacing: 2
    
            Row {
                spacing: 5
                TextField {
                    id: textField
                    text: Qt.formatDate(calendar.selectedDate, "dd.MM.yyyy");
                    //                readOnly: true
    
                    function validate_date(value)
                    {
                        var arrD = value.split(".");
                        arrD[1] -= 1;
                        var d = new Date(arrD[2], arrD[1], arrD[0]);
                        if ((d.getFullYear() == arrD[2]) && (d.getMonth() == arrD[1]) && (d.getDate() == arrD[0])) {
                            return true;
                        } else {
    
                            return false;
                        }
                    }
    
                    function getMonth(value)
                    {
                        var arrm = value.split(".");
                        arrm[1] -= 0;
                            return arrm[1];
    
                    }
    
                    function getDay(value)
                    {
                        var arrd = value.split(".");
                        arrd[0] -= 0;
                            return arrd[0];
    
                    }
    
                    Keys.onReleased:
                   {validate_date(text)?console.log("Current data: "+(text.substring(3,5))):{text=Qt.formatDate(calendar.selectedDate, "dd.MM.yyyy")}}
                    inputMask: "99.99.9999"
                    inputMethodHints: Qt.ImhDigitsOnly
                    Keys.onUpPressed:  calendar.__selectNextDay()
                    Keys.onDownPressed: calendar.__selectPreviousDay()
                }
                Rectangle {
                    id: btnOpen
                    radius: 5
                    width: 30
                    height: textField.height
                    color: dateEdit.color
    
                    Text {
                        text: "*"
                    }
    
                    MouseArea {
                        anchors.fill: parent
    
                        onClicked: {
                            dateEdit.isCalendarOpened ?  closeCalendar() : openCalendar()
                        }
                    }
                }
            }
    
            Calendar {
                id: calendar
                visible: false
                dayOfWeekFormat: Locale.ShortFormat
                onClicked: {
                    closeCalendar()
                }
    
                function open()
                {
                    visible = true
                }
    
                function close()
                {
                    visible = false
                }
            }
        }
    
        function openCalendar()
        {
            calendar.open()
            calendarOpened()
        }
    
        function closeCalendar()
        {
            calendar.close()
            calendarClosed()
        }
    }
    
      S
      • Маусым 21, 2020, 6:54 Т.Ж.
      • (өңделген)

      Либо, это не полный код, либо... Просто непонятно откуда взялся массив arrm в функции getMounth , так как вы используете arrd

        РС
        • Маусым 21, 2020, 6:56 Т.Ж.

        там несколько функций

          РС
          • Маусым 22, 2020, 2:15 Т.Қ.

          Доделал

          import QtQuick 2.0
          import QtQuick.Controls 1.4
          
          Item {
              id: dateEdit
          
              readonly property date currentDate: calendar.selectedDate
              readonly property bool isCalendarOpened: calendar.visible
              property string color: "lightblue"
          
              signal calendarOpened;
              signal calendarClosed;
          
              width: textFielddata.width + btnOpen.width
              height: textFielddata.height
          
              Column {
                  id: column
                  spacing: 2
          
                  Row {
                      spacing: 5
                      TextField {
                          id: textFielddata
                          text: Qt.formatDate(calendar.selectedDate, "dd.MM.yyyy");
                          //                readOnly: true
          
                          function validate_date(value)
                          {
                              var arrD = value.split(".");
                              arrD[1] -= 1;
                              var d = new Date(arrD[2], arrD[1], arrD[0]);
                              if ((d.getFullYear() == arrD[2]) && (d.getMonth() == arrD[1]) && (d.getDate() == arrD[0])) {
                                  return true;
                              } else {
          
                                  return false;
                              }
                          }
          
          
                          validator: RegExpValidator { regExp: /^([0-2]?[1-9]|3[0-9]).(0?[1-9]|1[0-9]).([0-9][0-9][0-9][0-9])$ / } // /^([0-2]?[1-9]|3[0-1]).(0?[1-9]|1[0-2]).([0-9][0-9][0-9][0-9])$ /
                          Keys.onReleased:
                          {if (validate_date(text)) {console.log("Current data: "+(text))} else if ([text[3]].toString() == "1") {text=text.substring(0,4)+0+text.substring(5);textFielddata.cursorPosition=5} else if ([text[0]].toString() == "3"&&([text[1]].toString()!="0")&&([text[1]].toString()!="1"))  {text=text.substring(0,1)+0+text.substring(2);textFielddata.cursorPosition=1} else {text="01"+text.substring(2);textFielddata.cursorPosition=0}}
                          inputMask:"99.99.9999";
                          inputMethodHints: Qt.ImhDigitsOnly
                          Keys.onUpPressed:  calendar.__selectNextDay()
                          Keys.onDownPressed: calendar.__selectPreviousDay()
                      }
                      Rectangle {
                          id: btnOpen
                          radius: 5
                          width: 30
                          height: textFielddata.height
                          color: dateEdit.color
          
                          Text {
                              text: "*"
                          }
          
                          MouseArea {
                              anchors.fill: parent
          
                              onClicked: {
                                  dateEdit.isCalendarOpened ?  closeCalendar() : openCalendar()
                              }
                          }
                      }
                  }
          
                  Calendar {
                      id: calendar
                      visible: false
                      dayOfWeekFormat: Locale.ShortFormat
                      onClicked: {
                          closeCalendar()
                      }
          
                      function open()
                      {
                          function get_date(value)
                          {
                              var arrD = value.split(".");
                              arrD[1] -= 1;
                              var d = new Date(arrD[2], arrD[1], arrD[0]);
                              if ((d.getFullYear() == arrD[2]) && (d.getMonth() == arrD[1]) && (d.getDate() == arrD[0])) {
                                  return d;
                              } else {
          
                                  return false;
                              }}
          
                          calendar.selectedDate=new Date(get_date(textFielddata.text));
                          visible = true
          
                      }
          
                      function close()
                      {
                          visible = false
                      }
                  }
              }
          
              function openCalendar()
              {
                  calendar.open()
                  calendarOpened()
              }
          
              function closeCalendar()
              {
                  calendar.close()
                  calendarClosed()
              }
          }
          
          Вызов
          
          import QtQuick 2.9
          import QtQuick.Window 2.2
          import QtQuick.Controls 2.5
          import QtQuick.Controls 2.5
          
          Window {
              visible: true
              width: 640
              height: 480
              title: qsTr("QML DATAEDIT тест")
          
              QmlDateEdit{
          
              }
          
          }
          
          
            РС
            • Маусым 27, 2020, 9:23 Т.Ж.
            • (өңделген)

            Доработка функции:

            Доработка функции:
            function open()
                        {
                            function get_date(value)
                            {
                                var arrD = value.split(".");
                                arrD[1] -= 1;
                                var d = new Date(arrD[2], arrD[1], arrD[0]);
                                if ((d.getFullYear() == arrD[2]) && (d.getMonth() == arrD[1]) && (d.getDate() == arrD[0])) {
                                    return d;
                                } else {
            
                                    return false;
                                }}
            
                            calendar.selectedDate=new Date(get_date(textFielddata.text));
                            visible = true
            
                        }
            

              Пікірлер

              Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
              Кіріңіз немесе Тіркеліңіз
              OI
              • Ora Iro
              • Жел. 24, 2024, 6:38 Т.Ж.

              C++ - Тест 001. Первая программа и типы данных

              • Нәтиже:40ұпай,
              • Бағалау ұпайлары-8
              AD

              C++ - Тест 004. Указатели, Массивы и Циклы

              • Нәтиже:50ұпай,
              • Бағалау ұпайлары-4
              m
              • molni99
              • Қаз. 26, 2024, 1:37 Т.Ж.

              C++ - Тест 004. Указатели, Массивы и Циклы

              • Нәтиже:80ұпай,
              • Бағалау ұпайлары4
              Соңғы пікірлер
              ИМ
              Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
              Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
              Evgenii Legotckoi
              Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
              Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
              A
              ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
              Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
              ИМ
              Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
              Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
              d
              dblas5Шілде 5, 2024, 11:02 Т.Ж.
              QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
              Енді форумда талқылаңыз
              Evgenii Legotckoi
              Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
              добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
              t
              tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
              google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
              NSProject
              NSProjectМаусым 4, 2022, 3:49 Т.Ж.
              Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
              9
              9AnonimҚаз. 25, 2024, 9:10 Т.Ж.
              Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

              Бізді әлеуметтік желілерде бақылаңыз