Russian Qt Forum
Апрель 25, 2024, 11:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1]
1  Qt / Qt Quick / Re: QML DATAEDIT : Июнь 22, 2020, 21:11
Доделал
Код:
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 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 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{

    }

}
2  Qt / Qt Quick / Re: QML DATAEDIT : Июнь 21, 2020, 08:31
Доделал, но остался единственный баг с месяцами: число он нормально отрабатывает, а если ввожу месяц и стоит 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()
    }
}

3  Qt / Qt Quick / Re: QML DATAEDIT : Июнь 21, 2020, 02:25
Сделал элемент, все вводится. Осталось только проверить дату на корректность. Как быть? Есть метод 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()
    }
}
4  Qt / Qt Quick / QML DATAEDIT : Июнь 20, 2020, 22:53
Здравствуйте, какой элемент 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
    }
5  Qt / Базы данных / Простейший запрос : Июнь 18, 2020, 22:54
Здравствуйте! Установил PG12.
Тестовый запрос: INSERT INTO "public"."NameTable" ("FirstName", "SurName", "Nik") VALUES ('ff', 'cc', 'bb');
Как реализовать его в query.prepare? ругается на кавычки.
6  Qt / Пользовательский интерфейс (GUI) / Запрет ввода ' в QLineEdit: : Март 09, 2020, 18:08
Здравствуйте! Есть на форме QLineEdit. Как запретить вводить в него только одинарные ковычки?
7  Qt / Пользовательский интерфейс (GUI) / TDBControlGrid : Февраль 23, 2020, 15:37
Здравствуйте, переписываю прогу с Delphi 7. В нем есть класс DBControlGrid. Есть ли что-то подобное на QT? QML?
8  Qt / Пользовательский интерфейс (GUI) / Re: Как работают сигналы в qt? : Февраль 23, 2020, 02:50
Вот так заработал перебор;

  b=ui->spinBox->cleanText();
    if (i>2) {i=0;};
    if (b=="ggg") {i=0;}
    else if (b=="aaa") {i=1;}
    else if (b=="bbb") {i=2;};



// QMessageBox::about(this, "текст", ui->spinBox->cleanText());
 // QMessageBox::about(this, "текст", QString::number(i));
     switch(i) {
       case 0:
         ui->spinBox->setSpecialValueText("aaa");  ui->spinBox->setValue(0);
         break;

       case 1:
         ui->spinBox->setSpecialValueText("bbb");  ui->spinBox->setValue(0);
         break;

       case 2:
         ui->spinBox->setSpecialValueText("ggg");  ui->spinBox->setValue(0);
         break;

     }
9  Qt / Пользовательский интерфейс (GUI) / Re: Как работают сигналы в qt? : Февраль 23, 2020, 01:33
void MainWindow::on_spinBox_valueChanged(const QString &arg1)
{

    int i=1;
    QMessageBox::about(this, "текст", ui->spinBox->cleanText());
    QMessageBox::about(this, "текст", QString::number(i));
    if (i==1)  {(ui->spinBox->setSpecialValueText("ааа"));}
    else if (i==2) {(ui->spinBox->setSpecialValueText("ббб"));}
     ui->spinBox->setValue(0);
     if (i>2) {i=1;} else i++;

   //     ui->spinBox->setSpecialValueText("ююю");

}

вот так он выводит текст, только цикл начинается с начала.  Необходимо, чтобы он выводил заранее написанные три слова по кругу.
в данном примере при изменении
10  Qt / Пользовательский интерфейс (GUI) / Как работают сигналы в qt? : Февраль 22, 2020, 21:31
Здравствуйте, я новичок в qt, поэтому прошу и помочь разобраться;

допустим, есть spinbox. Как сделать, чтобы через QMessageBox выводился текст - его нынешнее значение?

________________________

Вообще мне нужно сделать, чтобы вместо чисел можно было выбирать текст.
Страниц: [1]

Страница сгенерирована за 0.052 секунд. Запросов: 24.