Просмотр сообщений
|
Страниц: [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? ругается на кавычки.
|
|
|
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 выводился текст - его нынешнее значение?
________________________
Вообще мне нужно сделать, чтобы вместо чисел можно было выбирать текст.
|
|
|
|
|