Evgenii Legotckoi
Қар. 12, 2016, 9:16 Т.Қ.

QML - Урок 001. TextEdit IP мекенжайын тексеру

Доступны аналогичные статьи на Qt/С++ и PyQt5/Python

До полного набора уроков по Qt, на тему валидации IP-адреса дополню статьи также и вариантом на Qt/QML.

Будет также поле ввода данных, в которое будем вводить IP-адрес. Использоваться для валидации будет RegExpValidator . Одним неприятным моментом в данном случае является то, что подсунуть несколько переменных строки в данный RegExpValidator является довольно нетривиальной задачей, поэтому ограничимся написание регулярки сразу в свойстве regExp у данного объекта.


Структура проекта

Проект состоит из следующих файлов:

  • QMLLineEdit.pro - профайл проекта
  • main.cpp - стартовый исходный файл проекта
  • qml.qrc - файл ресурсов
  • main.qml - основной стартовый qml файл

QMLLineEdit.pro

QT += qml quick

CONFIG += c++11

SOURCES += main.cpp

RESOURCES += qml.qrc

# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    // Обращаю ваше внимание на этот атрибут.
    // Он включает масштабирование для устройств с высоким разрешением,
    // то есть в Qt5.7 уже не нужно пересчитывать пиксели в dpi
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QLatin1String("qrc:/main.qml")));

    return app.exec();
}

main.qml

Кода здесь совсем немного, даже меньше, чем для Qt/C++ и PyQt5/Python, поэтому просто приведу пример без комментариев и так должно быть всё ясно.

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0

ApplicationWindow {
    visible: true
    width: 480
    height: 120
    title: qsTr("QML Text Field IP Address")

    RowLayout {
        anchors.fill: parent
        anchors.margins: 10

        Label {
            text: "Введите IP-адрес"
        }

        TextField {
            validator: RegExpValidator {
                regExp:  /^((?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){0,3}(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$/
           }
        }
    }
}

Итог

В результате получим возможность ввода IP адреса и только IP адреса.

Ссылка на репозиторий проекта

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

M
  • Қыр. 14, 2017, 3:42 Т.Қ.

Не запскается проект. Только начал изучать QML, ранее работали программы.
Нужно специально как то устанавливать Qt под Android?
Я не мог допстить ошибку - скачивал проект с сайта.
В чем может быть проблема?

Evgenii Legotckoi
  • Қыр. 14, 2017, 4:18 Т.Қ.

Возможно проблема в версиях. Какие ошибки выдаёт?
В принципе можете скопипастить содержимое main.qml в свой новый созданный проект. Это должно быть достаточно.

Evgenii Legotckoi
  • Қыр. 14, 2017, 4:22 Т.Қ.

И, да , для Андроида необходимо устанавливать соотвествующие NDK и SDK , они есть на сайте Android Studio .

То есть недостаточно скачать сборку Qt для Андроида, необходимо ещё настроить Qt Creator на использование этих NDK и SDK.
M
  • Қыр. 14, 2017, 4:38 Т.Қ.

Спасибо. Сейчас все поставлю, попробую заново.
Ошибка не помню какая, я уже переустанавливаю  Qt.

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз