Библиотека сайта rus-linux.net
Qchar , который работает с 16-битными символами Unicode, представленными 16-битными беззнаковыми целыми значениями. В C существует тип «char» для работы с однобайтовыми значениями, для которых существует ограничение в 255 различных символов, поэтому при значениях размером в 16 бит возможно использование большего количества различных символов.
Некоторыми важными функциями этого класса являются: isdigit() , isLetter() , isLower() , isUpper() , isSymbol() , toLower() , toUpper() , и.т.д. Для использования этого класса необходимо подключить заголовочный файл QtCore . Давайте рассмотрим пример.
На основе описания из предыдущей статьи серии, создайте новый проект в Qt Creator. Я выбрал Консольное приложение Qt (Qt Console Application) из списка возможных типов проекта, поскольку не планирую использовать элементы графического интерфейса. Сохраните следующий код в файле main.cpp :
#include #include int main(int argc, char *argv[]) < QCoreApplication a(argc, argv); QChar ch; ch = ‘M’; if(ch.isLetter()) < if(ch.isLower()) qDebug() < «Ch is a Lower Letter»; else qDebug() < «Ch is an Upper Letter»; >qDebug()
Qt дизайн. Дизайн приложений QtWidgets на примере создания игры Крестики-нолики. Часть 1
Нажмите Ctrl+r для сборки и запуска проекта. Во всплывающем окне можно будет увидеть следующий вывод программы:
Ch is an Upper Letter 2
Для того, чтобы разобраться в работе более 20 функций класса QChar , разработайте аналогичные небольшие программы и протестируйте эти функции по очереди.
Следующим важным классом является QString . В большинстве случаев при работе над проектом приходится сталкиваться с необходимостью обработки строк. В составе Qt есть очень полезный класс под названием QString (строки состоят из символов Unicode), базовым элементом которого являются объекты QChar .
Qt предоставляет и другой вариант хранения данных в форме строк — QByteArray , который хранит просто байтовое представление данных. Но для того, чтобы сделать возможной поддержку различных языков приложением, следует использовать класс QString для строк, используемых в пользовательском интерфейсе. В следующем примере кода используется ряд важных функций:
#include #include int main(int argc, char *argv[]) < QCoreApplication a(argc, argv); QString str(«Linux»); //QString str = «Linux»; qDebug() < str.size() < str; str.append(» Kernel»); qDebug() < str.size() < str; str.insert(5,»3.0″); qDebug() < str.size() < str; if(str.startsWith(«Linux»)) < qDebug() < «The string starts with Linux»; >int ret = QString::compare(str, «Linux3.0 Kernel», Qt::CaseInsensitive); if(!ret) < qDebug() < «Strings are equal»; >return a.exec(); >
После запуска следует вывод:
5 «Linux» 12 «Linux Kernel» 15 «Linux3.0 Kernel» The string starts with Linux Strings are equal
В вышеприведенном коде мы использовали статическую функцию compare класса QString , третьим аргументом которой является энумератор Qt::CaseInsensitive . Важной вещью, о которой необходимо помнить, является различие между строкой со значением NULL и пустой строкой. Посмотрите на следующие объявления:
Урок 2 — Первая Windows программа на Qt
QString str1; QString str(«»);
В первом случае объект str1 создан при помощи стандартного конструктора и строка является одновременно и пустой строкой и строкой со значением NULL. Строка со значением NULL создается при создании экземпляра класса QString при помощи стандартного конструктора. Во втором случае при создании объекта мы передали строку инициализации («») , поэтому Qt будет рассматривать объект как пустую строку, а не строку со значением NULL.
Работа со списками
После рассмотрения классов для работы с базовыми типами данных, давайте рассмотрим контейнерные классы. Начнем с того, что в нашем распоряжении есть QList , являющийся универсальным контейнерным классом. Задавайте тип хранимых при помощи QList данных в следующей обобщенной форме:
QList mylist;
Можете использовать int, QString, Qdate, и.т.д. вместо «type». Давайте рассмотрим следующий код в качестве примера:
#include #include int main(int argc, char *argv[]) < QCoreApplication a(argc, argv); QListmylist; mylist < «Two» < «Three»; mylist.prepend(«One»); mylist.append(«Four»); for(int i=0; iwhile(!mylist.isEmpty()) mylist.takeFirst(); qDebug() < «The list size One» «Two» «Three» «Four» The list size = 0
В коде выше мы использовали оператор для добавления элементов в список mylist . Функции класса позволяют нам добавлять элементы в начало и в конец списка. Для доступа к элементам списка мы использовали порядковый номер элемента, передавая его в качестве аргумента функции at(index) . Для удаления элементов с начала списка мы использовали функцию takeFirst(); а для удаления элементов с конца списка мы использовали takeLast() .
Класс итератора
Вместо доступа к элементам списка по порядковому номеру, мы можем использовать итераторы. Класс итератора в Qt носит название QListIterator . Давайте заменим цикл for в коде выше на следующий код:
QListIterator it(mylist); while(it.hasNext()) qDebug() < it.next();
Здесь мы создаем объект QListIterator для перечисления элементов списка, хранящего объекты QString . Мы передаем объект mylist типа QList конструктору класса QListIterator . Это позволяет установить итератор на первый элемент списка mylist . В цикле while происходит получение и вывод значений элементов до того момента, как итератор достигает конца списка.
Класс QList также предоставляет возможность использовать итераторы, основанные на стандартной библиотеке шаблонов (Standard Template Library). Если судить по скорости работы, они быстрее (незначительно), чем метод, описанный выше. А вот и пример кода:
QList::const_iterator it; for (it = mylist.constBegin(); it != mylist.constEnd(); it++) qDebug() < *it;
Если вас заинтересовала эта тема, вы можете найти больше подробностей об итераторах в документации Qt.
Двигаемся дальше. Важный класс, являющийся потомком QList , позволяет работать с объектами типа QString надлежащим образом. Класс QStringList является вариантом реализации QList . Я использую этот класс в тех случаях, когда хочу разделить строку на подстроки. Давайте рассмотрим пример исходного кода:
#include #include int main(int argc, char *argv[])
Скомпилируйте и запустите программу. Вывод будет аналогичен приведенному ниже:
«Linux» «Kernel» «3.0»
Первая программа на Qt:
Qt – это мощный инструментарий, имеющий множество способов для воплощения задумок программиста в жизнь. Давайте начнём его освоение с самой первой программы
Итак, у вас под рукой имеется среда разработки QtCreator с подключенным к ней компилятором(например MinGW ). В среде разработки выбираем Другой проект-> Проект с поддиректориями.
Название: cppstudio . Здесь для удобства мы будем хранить все приложения взятые с сайта. Создадим здесь под проект QWidget с название lesson_1 и удаляем в нём файлы mainwindows.h , mainwindows.cpp , и форму.
Переписываем код программы печатающей на экран «Привет мир!» в main.cpp :
#include #include #include #include int main(int argc, char *argv[]) < QApplication qapp(argc, argv); QHBoxLayout * hlayout = new QHBoxLayout; QLabel *label = new QLabel(«Привет мир!»); QPushButton *butt = new QPushButton(«Exit»); QWidget *mainWindow = new QWidget; QObject::connect(butt,SIGNAL(clicked()), hlayout->addWidget(label); hlayout->addWidget(butt); mainWindow->setLayout(hlayout); mainWindow->show(); return qapp.exec(); >
Давайте разберём код программы:
В строчках 1-4 идёт подключение нужных заголовочных файлов.
В qt за графический интерфейс пользователя отвечает семейство классов . Так как нам понадобятся виджеты, то в первую очередь прописываем нужные библиотеки( QLabel , QPushButton ).
#include QApplication qapp(argc, argv);
Одноимённый класс, подключаемый через заголовочный файл QApplication нужен в любом Qt-проекте в единственном экземпляре. Он отвечает за отслеживание событий и сообщений в системе, изменения вида окон приложения и другие полезные функции.
QHBoxLayout * hlayout = new QHBoxLayout; QLabel *label = new QLabel(«Hello World»); QPushButton *butt = new QPushButton(«Exit»); QWidget *mainWindow = new QWidget;
В этой части через динамическую память резервируется место под классы.
QObject::connect(butt,SIGNAL(clicked()),
Через метод класса QObjekt::connect(addWidget(label); layout->addWidget(butt);
Для расположения и компоновки виджетов “в сетке”, горизонтально или вертикально используются классы QHBoxLayout, QGridLayout, QHBoxLayout. Метод-член addWidget добавляет их в менеджер компоновки.
mainWindow->setLayout(hlayout); mainWindow->show();
Последние строки устанавливают окну класс компоновки с его виджетами и заставляют его стать видимым.
В итоге у вас должна получится программа:
Источник: cppstudio.com
Быстрые примеры и учебные пособия Qt
На этой странице перечислены примеры Qt QML и Qt Quick , однако многие другие модули Qt содержат примеры, связанные с их QML API.
Запуск примеров и демонстраций
Примеры упакованы с установщиками Qt и доступны через Qt Creator. Для получения дополнительной информации о запуске примеров в Qt Creator посетите страницу Создание и запуск примера .
Открывайте и запускайте примеры в режиме приветствия Qt Creator . Большинство примеров выполняются на разных платформах, и для поиска примеров для конкретных платформ введите название платформы (или любые ключевые слова) в поле поиска. Например, если ввести mobile в поле поиска, будут перечислены примеры, полностью совместимые с мобильными платформами.
Для просмотра других примеров и руководств посетите страницу примеров и руководств по Qt .
Qt Быстрые демонстрации
Вот список полнофункциональных демо-приложений.Это полноценные приложения,которые показывают,как собирается и структурируется развертываемое приложение на Qt.Многие из демо-приложений могут быть развернуты на мобильных и настольных платформах.
Приложение Qt Quick с пользовательским интерфейсом на основе состояний
QML-приложение,разработанное для устройств портрета,использующих пользовательские компоненты,анимированные с AnimationController,и JavaScript для логики приложения.
Приложение часов QML,которое демонстрирует использование типа ListView для отображения данных,сгенерированных ListModel и типом SpringAnimation для анимации изображений.
QML-приложение для сенсорных устройств,использующее Ретранслятор с моделью FolderListModel для доступа к содержимому в папке,и PinchArea,содержащее MouseArea для обработки жестов сжатия извлеченного содержимого.
QML-просмотрщик фотографий,который использует XmlListModel и XmlListModelRole для загрузки лент Flickr,а также Package для отображения фотографий в различных видах
QML RSS читалка новостей,которая использует пользовательские QML типы XmlListModel и XmlListModelRole для загрузки XML данных,ListModel и ListElement для создания списка категорий,и ListView для отображения данных.
Настраиваемый график запасов для NASDAQ-100
Разработка быстрых приложений Qt
На следующих страницах показано, как разрабатывать приложения Qt с использованием Qt Creator и Qt Quick. На страницах показаны различные этапы, например варианты использования и вводный материал. Для получения дополнительной информации о Qt Quick Applications и связанных модулях посетите страницу QML Applications .
Development Environment
- Создание быстрых проектов Qt
- Creating Components
- Exporting Components
- Использование модулей QML с подключаемыми модулями
Начиная с QML и Qt Quick
- Первые шаги с QML
- Qt Редактор быстрого текста
- SameGame
- Визуальные типы в QML
- Ответ на пользовательский ввод в QML
- Анимации в QML
- Отображение текста в QML
- Макеты в QML
- Поддержка стиля и темы
- Интеграция JavaScript в QML
Extending QML
В следующих руководствах показано, как можно объединить приложение на основе QML с кодом C++ с помощью модуля Qt QML . Для получения информации о расширении QML посетите страницу Интеграция QML и C++ .
Источник: runebook.dev