Evgenii Legotckoi
12 ноября 2016 г. 21:16

QML - Урок 001. TextEdit IP Address Validation

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

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

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


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

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

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

QMLLineEdit.pro

  1. QT += qml quick
  2.  
  3. CONFIG += c++11
  4.  
  5. SOURCES += main.cpp
  6.  
  7. RESOURCES += qml.qrc
  8.  
  9. # Additional import path used to resolve QML modules in Qt Creator's code model
  10. QML_IMPORT_PATH =
  11.  
  12. # Default rules for deployment.
  13. qnx: target.path = /tmp/$${TARGET}/bin
  14. else: unix:!android: target.path = /opt/$${TARGET}/bin
  15. !isEmpty(target.path): INSTALLS += target

main.cpp

  1. #include <QGuiApplication>
  2. #include <QQmlApplicationEngine>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6. // Обращаю ваше внимание на этот атрибут.
  7. // Он включает масштабирование для устройств с высоким разрешением,
  8. // то есть в Qt5.7 уже не нужно пересчитывать пиксели в dpi
  9. QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
  10. QGuiApplication app(argc, argv);
  11.  
  12. QQmlApplicationEngine engine;
  13. engine.load(QUrl(QLatin1String("qrc:/main.qml")));
  14.  
  15. return app.exec();
  16. }

main.qml

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

  1. import QtQuick 2.7
  2. import QtQuick.Controls 2.0
  3. import QtQuick.Layouts 1.0
  4.  
  5. ApplicationWindow {
  6. visible: true
  7. width: 480
  8. height: 120
  9. title: qsTr("QML Text Field IP Address")
  10.  
  11. RowLayout {
  12. anchors.fill: parent
  13. anchors.margins: 10
  14.  
  15. Label {
  16. text: "Введите IP-адрес"
  17. }
  18.  
  19. TextField {
  20. validator: RegExpValidator {
  21. 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])$/
  22. }
  23. }
  24. }
  25. }

Итог

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

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

Вам это нравится? Поделитесь в социальных сетях!

M
  • 14 сентября 2017 г. 15:42

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

Evgenii Legotckoi
  • 14 сентября 2017 г. 16:18

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

Evgenii Legotckoi
  • 14 сентября 2017 г. 16:22

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

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

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

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь