Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
13 декабря 2015 г. 15:58

Qt

QNetworkAccessManager, Qt, http, скачивание файла

Для работы с сетью кроме использования классов QTcpSocket или QUdpSocket можно использовать QNetworkAccessManager. Данный класс предоставляет функционал для отправки запросов по сети и получения ответов и удобен для работы с протоколом HTTP.

Поэтому предлагаю написать приложение, которое позволит скачать xml-файл с сайта и записать его файл на локальном диске компьютера.

Логика приложения следующая:

  1. Скачать файл;
  2. Записать его на локальный диск по следующему пути C:/example/file.xml;
  3. Прочитать записанный файл и отобразить данные в QTextEdit.

Структура проекта для работы с HTTP

Структура проекта следующая:

  • DownloadHttp.pro - профайл проекта;
  • main.cpp - основной файл исходных кодов приложения;
  • widget.h - заголовочный файл окна приложения;
  • widget.cpp - файл исходных кодов окна приложения;
  • downloader.h - заголовочный файл класса для скачивания файла;
  • doqnloader.cpp - файл исходных кодов класса для скачивания файла.
11 декабря 2015 г. 15:18

QML

Qt, QML, Android, Android Manifest, manifest

Когда приходит время вести разработку под Android на Qt, то Мы рано или поздно приходим к необходимости работать с файлом AndroidManifest.xml. В данном файле Мы имеем возможность указать определённые принципиальные настройки поведения для нашего приложения, например ориентацию экрана, или основную тему приложения.

Но по умолчанию Android Manifest в Qt Creator не создаётся. Чтобы начать с ним работать, необходимо будет его создать в параметрах сборки проекта.

Пошаговая работа с Android Manifest

Первый шаг

Для этого необходимо зайти во вкладку Проекты и в ней найти необходимый нам комплект сборки. Выбрать пункт Сборка и в нём найти пункт Собрать Android APK. Развернём этот пункт кликнув на "Подробнее".

Здесь Вы сможете выбрать целевой уровень SDK и настроить параметры сборки APK.

8 декабря 2015 г. 15:20

Qt

ECHO, ECHO server, Qt, QTcpServer, QTcpSocket

Для работы со стеком TCP/IP Qt предоставляет классы QTcpServer, QTcpSocket, а также QUdpSocket. Для первого знакомства с работой локальной сети напишем Echo Сервер . Задача эхо сервера отправлять назад к отправителю полученные от него данные, как это делает эхо с человеческим голосом. Для подключения к серверу будет использоваться telnet.

TELNET (англ.  TErminaL NETwork) — сетевой протокол для реализации текстового интерфейса по сети (в современной форме — при помощи транспорта TCP). Название «telnet» имеют также некоторые утилиты, реализующие клиентскую часть протокола.

В предлагаемой программе объект класса QTcpServer будет слушать один из портов стека протоколов TCP/IP от всех хостов в сети. Прослушивание порта устанавливается методом listen() с указанием специфицированного IP-адреса или диапазона IP-адресов, а также порта прослушивания.

Когда происходит подключение клиента к порту вызывается сигнал newConnection() , который будет поключён к слоту slotNewConnection(), в данном слоте будет инициировано подключение клиента в качестве объекта QTcpSocket на стороне сервера с помощью метода nextPendingConnection(), который возвращает указатель на объект QTcpSocket.

К новому сокету будет подключено два слота. Первый слот slotServerRead() будет подключён к сигналу readyRead от сокета и будет вызываться в том случае, если на сокет пришли данные, которые готовы к чтению. Второй слот slotClientDisconnected() подключён к сигналу disconnected() , который вызывается в том случае, когда клиент отключился от сервера и необходимо закрыть соединение со стороны сервера.

Структура проекта для работы с QTcpServer

Будет создано консольное приложение, следовательно классов вроде MainWindow в приложении использовано не будет.

  • EchoServer.pro - профайл проекта;
  • main.cpp - основной файл исходных кодов;
  • mytcpserver.h - заголовочный файл сервера;
  • mytcpserver.cpp - файл исходных кодов сервера;
6 декабря 2015 г. 14:47

Qt

GameDev, QGraphicsItem, QGraphicsObject, QGraphicsScene, Qt

Моё внимание обратили на то, что для работы с сигналами и слотами вместо класса наследованного от QGraphicsItem и от QObject можно использовать класс наследованный от QGraphicsObject . И действительно, если немного покопаться в исходниках QGraphicsObject , то обнаружится, что это класс наследованный от QGraphicsItem и от QObject . То есть также применяется множественное наследование, только в данном случае все велосипеды уже написаны до нас. Поэтому попробуем поработать с данным классом на примере игровой механики.

А именно, предлагаю написать программу, в которой Мы будет перемещать героя кликом мыши по графической сцене, как в любой РПГ наподобие Diablo.

Структура проекта для работы с QGraphicsObject

  • QGraphicsObjectExample.pro - профайл проекта;
  • main.cpp - основной файл исходных кодов;
  • widget.h - заголовочный файл окна приложения;
  • widget.cpp - файл исходных кодов окна приложения;
  • customscene.h - заголовочный файл кастомизированной графической сцены ;
  • customscene.cpp - файл исходных кодов кастомизированной графической сцены;
  • triangle.h - заголовочный файл класса героя-треугольника, который будет передвигаться;
  • triangle.cpp - файл исходных кодов класса героя-треугольника.
4 декабря 2015 г. 17:18

Qt

figure, QGraphicsItem, QGraphicsScene, Qt, Qt уроки, square, triangle, ооп, Полиморфизм, пример

Полиморфизм является одной из парадигм ООП (объектно-ориентированное программирование). Полиморфизм реализует способность базового класса предоставлять свойства и методы, реализация которых не известна для будущих классов, которые будут наследованы от данного класса. То есть базовый класс в данном случае имеет весь необходимый набор методов для реализации поставленных задач, но конкретная реализация определённых методов возлагается на классы потомки. И, как правило, базовый класс является абстрактным, то есть от него не создаются объекты.

Например, необходимо реализовать программу, в которой имеется возможность рисовать несколько геометрических фигур мышью на графической сцене , выбирая текущую фигур с помощью кнопок в приложении. Для этого можно создать несколько классов, каждый из которых будет реализовывать весь необходимый функционал, и фактически дублировать в каждом классе большую часть кода, усложняя и запутывая разработку. Либо можно создать один базовый класс, например, Figure , который будет наследован от QGraphicsItem , и реализовать весь основной функционал в данном классе, а потом уже создать три класса, которые будут наследованы от данного класса, но реализовать в них только метод отрисовки самой фигуры: Romb, Square, Triangle.

На ниже следующем рисунке показана логика наследования для базового класса Figure . Применено также множественное наследование класса Figure для реализации работы с сигналами и слотами .

30 ноября 2015 г. 13:49

Qt

QCPCurve, QCPItemTracer, QCustomPlot, Qt5, график

Постоянно слышу про QCustomPlot относительно работы с графиками в Qt , но по началу сделал в одном своём приложении свои велосипеды, а сейчас в свободную минутку решил познакомиться с этой библиотекой. Показалось, что всё-таки в ней есть ещё над чем работать разработчикам, но на данный момент она обладает очень мощным функционалом. Поработал с ней с удовольствием и набросал свой код для баловства и изучения.

А теперь ближе к делу. Программа в примере должна выполнять следующий функционал:

  1. Отрисовать один график по нескольким точкам;
  2. Иметь вертикальную передвигаемую линию;
  3. За вертикальной линией будет следовать трассировщик, который будет вставать в ближайшие к точки графика от вертикальной линии.

Структура проекта для QCustomPlot

В структуру проекта входят следующие файлы:

  • QCustomPlotExample.pro - профайл проекта;
  • mainwindow.h - заголовочный файл основного окна приложения;
  • mainwindow.cpp - файл исходных кодов основного окна приложения;
  • main.cpp - основной файл исходных кодов приложения;
  • qcustomplot.h - заголовочный файл библиотеки QCustomPlot;
  • qcustomplot.cpp - файл исходных кодов QCustomPlot.
28 ноября 2015 г. 15:06

QML

Navigation Drawer, Qt, QtQuick, QML, Qndroid

Одним из основных элементов управления в Android приложении является Navigation Drawer , но в QML нет готового компонента для этого элемента, зато парни из Cutehacks сделали свой Navigation Drawer , код этого компонента выложен на гитхабе. Я давно уже хотел запустить этот код на живом Android устройстве и вот руки наконец-то до него дотянулись.

Я подробно изучил этот код и немного его подправил, поскольку в той версии было некоторое несоответствие Material Design в том плане, что панелька раскрывалась на 78 процентов от ширины экрана вне зависимости от ориентации. А Material Design рекомендует в портретной ориентации раскрывать Navigation Drawer так, чтобы он не доходил до противоположного края на 56 dip в случае со смартфонами и на 64 dip в случае с планшетами, но сделаем хотя бы для смартфонов, а в ландшафтной ориентации был не более, чем 320 dip шириной. Что я и поправил, также выпилив малую часть часть ненужного на данный момент кода и немного переименовав переменные под себя.

Что касается величины dip , то есть пикселей независимых от плотности экрана устройства, то это уже вопрос правильного масштабирования элементов интерфейса .

Предлагаю Вашему вниманию пример использования данного Navigation Drawer для смены трёх фрагментов в объект Loader с помощью трёх пунктов меню, которые будут находиться в данном Navigation Drawer .

Структура проекта для работы с Navigation Drawer

Структура проект будет сходна со структурой проекта из статьи по изучению работы с компонентом Loader .

  • QmlNavigationDrawer.pro - профайл проекта;
  • main.cpp - основной файл исходных кодов приложения;
  • main.qml - основной файл кодов qml;
  • Fragment1.qml - первый фрагмент для замены в Loader;
  • Fragment2.qml - второй фрагмент;
  • Fragment3.qml - третий фрагмент.
  • NavigationDrawer.qml - сам объект Navigation Drawer.
27 ноября 2015 г. 14:54

QML

Qt, QML, QtQuick, Loader

Для организации динамической смены компонентов удобно использовать компонент Loader, который входит в QML QtQuick и является  контейнером для ваших компонентов в приложении, которые допустим необходимо периодически заменять в интерфейсе.

Если провести аналогию, например, с разработкой на Java под Android, то там имеется система фрагментов, которые также могут заменяться в контейнере для них, следуя логике разрабатываемого приложения. Допустим, Мы кликаем на кнопку и в определённом контейнере у нас заменяется один фрагмент другим, а если кликаем на другую кнопку, то появляется третий фрагмент, который заменяет второй фрагмент собой.

Поэтому сделаем приложение, которое будет иметь 5 кнопок и по нажатию каждой кнопки в Loader будут меняться фрагменты.

Структура проекта для работы с Loader

  • QmlLoader.pro - профайл проекта;
  • main.cpp - основной файл исходных кодов приложения;
  • main.qml - основной файл кодов qml;
  • Fragment1.qml - первый фрагмент для замены в Loader;
  • Fragment2.qml - второй фрагмент;
  • Fragment3.qml - третий фрагмент.
25 ноября 2015 г. 14:43

QML

QML, Qt, CSV, EXCEL

В том случае, если Вам понадобилось выгрузить таблицу с данными из приложения в файл формата CSV , интерфейс которого ещё и написан на QML , то спешу с этой статьей, чтобы дать небольшую подсказку.

Например, в статье по работе с базой данных SQLite в приложении на QML была создана база данных, в которую добавлялись данные и удалялись из неё. При этом они отображались в TableView , который был уже частью интерфейса, написанного на QML. А для отображения этой таблицы использовалась модель данных, наследованная от QSqlQueryModel .

Предлагаю воспользоваться исходниками того проекта и расширить его так, чтобы в приложении имелась кнопочка для экспорта данных в файл формата CSV .

Что такое формат CSV

CSV (от англ. Comma-Separated Values — значения, разделённые запятыми) — текстовый формат, предназначенный для представления табличных данных. Каждая строка файла — это одна строка таблицы. Значения отдельных колонок разделяются разделительным символом (delimiter) — запятой ( , ). Однако, большинство программ вольно трактует стандарт CSV и допускают использование иных символов в качестве разделителя.

Вообще суть работы сведётся к тому, чтобы сделать метод в нашей модели данных, который будет дергать данные из этой модели и разделять точкой с запятой каждую ячейку в строке, а каждую строку разделять символом новой строки "\n".

25 ноября 2015 г. 13:17

Qt

BLOB, QPixmap, Qt, SQL, SQLite, база данных, изображение

Изображение в базе данных может быть сохранено в формате BLOB (англ. Binary Large Object - двоичный большой объект), то есть в формате массива двоичных данных. Формат BLOB также подходит для сохранения аудио и видео данных в базах данных.

Рассмотрим сохранение и восстановление изображения из базы данных на примере следующего приложения, в котором скриншот с экрана компьютера будет сохраняться в базе данных и выводиться в специальный QLabel , когда соответствующая запись будет выбрана в QTableView , который будет отображать все записи об изображения, хранящихся в базе данных.

Таким образом имеем таблицу в базе данных со следующими полями:

  • id (INTEGER) - id записи;
  • Name (VARCHAR(255)) - название хранящегося в базе данных файла;
  • Pic (BLOB) - поле для хранения изображений в базе данных.

Если не вдаваться подробно в урок, то самая ценная информация по данной теме в конце файла mainwindow.cpp в следующих методах:

  • MainWindow::on_screenButton_clicked()
  • MainWindow::slotCurrentPic(QModelIndex index)

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

  • PicDataBase .pro - профайл проекта;
  • database.h - заголовочный файл бессменного класса обёртки для работы с базой данных;
  • database.cpp - файл исходных кодов класса-обёртки для работы с базой данных;
  • mainwindow.h - заголовочный файл основного окна приложения;
  • mainwindow.cpp -файл исходных кодов основного окна приложения;
  • mainwindow.ui - форма главного окна приложения;
  • main.cpp - основной файл исходных кодов приложения.
IT
25 марта 2019 г. 17:32
Ilya The Engineer

Qt - Тест 001. Сигналы и слоты

  • Результат:5баллов,
  • Очки рейтинга-10
G
25 марта 2019 г. 8:34
GAG

C++ - Тест 002. Константы

  • Результат:41баллов,
  • Очки рейтинга-8
G
25 марта 2019 г. 8:25
GAG

C++ - Тест 001. Первая программа и типы данных

  • Результат:66баллов,
  • Очки рейтинга-1
Последние комментарии
22 марта 2019 г. 12:32
Евгений Легоцкой

Ну может бибилотеки не те положили? У вас сборка для MinGW, а либы для MSVC.
ВН
22 марта 2019 г. 11:08
Волчонок Над-Пропастью

Из кьюта приложение не хочет запускаться, аварийно завершается, но каких-либо ошибок не выдаёт. Оно открывается, после нажатия "старт" зависает и завершается. Если не из кьюта запускать дебаг ...
21 марта 2019 г. 15:49
Евгений Легоцкой

серьезно? Эта ошибка 404 уже даже не относится к данному вопросу. В каких-то urls в вашем проекте. Вопросы, которые не относятся непосредственно к статье, задавайте, пожалуйста на...
АБ
21 марта 2019 г. 15:00
Артем Бел

а это где? сейчас ошибка в debag такая: Page not found (404)Request Method: GETRequest URL: http://amadowshop.site/accounts/profile/
21 марта 2019 г. 12:47
Евгений Легоцкой

не вижу здесь проблемы, поменяйте url для callback в приложения oauth в социальных сетях https://amadowshop.site/auth/verify/complete/facebook/
Сейчас обсуждают на форуме
U
25 марта 2019 г. 12:43
Unreal_man

Как сделать чтоб при клике на ячейку(ос андроид) ее сразу можно было редактировать?QGuiApplication::inputMethod()->show(); показывает клавиатуру, а вот что до этого прописать чтоб текст в ...
m
24 марта 2019 г. 10:36
monevich

Отвечу на свой же вопрос, может кому то это пригодится. Да, можно в функции main использовать такую конструкцию. При запуске программы из Qt передаю свой аргумент в параметрах командной строк...
22 марта 2019 г. 12:29
Дмитрий

Да, мьютекс добавил, но в том потоке, где сигнал вызывается.
ВН
22 марта 2019 г. 9:04
Волчонок Над-Пропастью

Да, на эту проблему! Зато у меня теперь новая, ругается на подключение QMediaPlayer, пишет, что не находит подобного файла или библиотеки. Пока не нашла как исправить, только вариант с переуст...
22 марта 2019 г. 8:58
Михаиллл

4) это , похоже, для создания видоизмененных страниц, для анимации. 3,5) добавить фвйл/qt/ui.qml
Присоединяйтесь к нам в социальных сетях

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы