Реклама

Тег → Qt

  • EVILEG
  • Статья
  • 6 июня 2017 г. 22:48

Qt/C++ - Урок 066. Загрузка файлов на FTP сервер

Qt, QNetworkAccessManager, FTP

Для работы с сетью в Qt 5 используется модуль Network , а для передачи данных по сети можно активно использовать класс QNetworkAccessManager , если Вы не создаёте свой собственный протокол для передачи данных. Но для работы с FTP достаточно использования QNetworkAccessManager , с которым мы уже работали при реализации скачивания файла с сайта .

Напишем небольшую программу, которая будет загружать на сервер произвольный файл, который мы будем выбирать на нашем ПК с помощью диалога выбора файла. Также будет показан прогресс загрузки файла на FTP сервер.

Для этого в окне приложения будет присутствовать кнопка для открытия диалога выбора файла. QLineEdit, в котором будет отображаться путь к файлу. QLineEdit, в который мы будем вводить адрес, по которому будет производиться загрузка файла. Кнопка запуска загрузки, а также прогресс бар, который покажет прогресс загрузки файла на сервер.

  • EVILEG
  • Статья
  • 3 мая 2017 г. 22:23

Qt/C++ - Урок 064. Как скрыть элементы из выпадающего списка QComboBox

Qt, QComboBox, QListView

В некоторых случаях требуется скрыть некоторые элементы из выпадающего списка QComboBox . Например, пользователю даётся возможность выбрать один из нескольких вариантов в QComboBox , но по умолчанию должен отображаться невалидный вариант, который должен отсутствовать в выпадающем списке. То есть по умолчанию выбрано что-то неправильное, что при валидации будет проверено и выдаст пользователю сообщение, что нужно выбрать один из возможных вариантов, которые доступны, тогда как неправильный вариант будет отсутствовать в списке.

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

Первый вариант с QItemDelegate не будет работать потому, что если даже сделать так, что определённый элемент не будет отрисовываться, его место нахождения тем не менее будет в списке. Просто на этом месте будет пустой прямоугольник.

Второй вариант с флагами не подходит потому, что нет такого флага, который бы заставил QComboBox скрыть определённый элемент в списке, хотя наиболее близким по значению является флаг Qt::ItemIsEnabled , но если его сбросить, то тогда текст элемента становится серым, показывая, что элемент нельзя выбрать.

Ещё можно рассмотреть вариант с моделью данных и отрисовкой элементов, но мы опять же возвращаемся к QItemDelegate , который опять же не работает.

  • EVILEG
  • Статья
  • 25 апреля 2017 г. 22:23

Qt/C++ - Урок 063. Добавление окон внутри главного окна приложения с помощью QMdiArea

QMdiArea, QWidget, Qt

Многие приложения, наподобие фотошопа умеют открывать проекты (изображения, тексты и т.д.) внутри окон, которые открываются внутри основного окна приложения. Qt предоставляет подобный фукционал в виде класса QMdiArea. В объект данного класса можно помещать объекты классов, наследованных от класса QWidget , и соответственно класса QWidget. Эти объекты будут отображать как окна, только будут расположены внутри QMdiArea.

Посмотрим пример с окном внутри окна.

  • EVILEG
  • Статья
  • 1 апреля 2017 г. 22:16

Qt Linux - Урок 003. Проверка уровня заряда батареи ноутбука с помощью libacpi

Qt, Battery, libacpi

Зашёл на форуме разговор про проверку уровня заряда батареи ноутбука под Linux с помощью библиотеки Qt. По факту Qt не предоставляет на данный момент такого класса, который давал бы возможность проверять заряд батареи.Но такой функционал можно реализовать с помощью третьесторонних библиотек, например libacpi.

Попробуем создать приложение, которое будет забирать хоть какие-нибудь данные, и которое будет выглядеть следующим образом:

  • EVILEG
  • Статья
  • 26 января 2017 г. 23:07

Подключение вашего Qt приложения к сервисам Google, используя OAuth 2.0

Qt, OAuth2, Google API, QtNetworkAuth

С выпуском Qt 5.8 был добавлен модуль QtNetworkAuth в качестве технологии на предварительном рассмотрении. Он сфокусирован на помощи разработчикам с их безумием в аутентификации. На данный момент поддерживаются OAuth1 и OAuth2 . В будущем будет включено ещё несколько методов авторизации.

Данный пост ориентирован на поддержку OAuth2 в Qt. Здесь показано, как использовать авторизацию Google в приложении. Ваше приложение будет способно показать типичное окно авторизации, как в веб-приложении (Примечание: требуется браузер или WebView).

IETF определяет OAuth 2.0, как:

OAuth 2.0 фреймворк авторизации позволяет третьим приложениям получить ограниченный доступ к HTTP сервисам, либо со стороны владельца ресурса для организации взаимодействия  между владельцем ресурса и HTTP сервисом, либо разрешить приложениям третьей стороны получить собственный доступ.

OAuth авторизация также является требованием использования Google API и доступа пользователя к информации, которая хранится в сервисах Google, таких как Gmail, Drive, Youtube, Maps, и других.

  • EVILEG
  • Статья
  • 28 января 2016 г. 18:24

Qt и Direct3D 12 - Первая встреча

D3D12, Direct3D, Qt, Qt Blog, QtD3D12Window

Перевод официальной новости, автор Laszlo Agocs

Лицо графических API изменяется. Qt Quick 2 был выпущен в 2012 году с Qt 5.0, и опирался на OpenGL и OpenGL ES 2.0. С тех пор были введены изменения и улучшения - был введён Qt Quick 2D Renderer, были проведены эксперименты с программной растеризацией, и добавлена система обеспечения для новейших версий OpenGL в весь графический стек Qt. Однако, как заметил Lars в своём выступлении на Всемирном саммите Qt 2015, ситуация изменяется: новые, низкоуровневые, более эффективные API, такие как Vulkan, Metal и Direct3D 12, собираются стать широко доступны. Некоторые из них ориентированы на конкретные платформы, делая их лучшим выбором в вопросе таргетирования на конкретные платформы, в то время как другие, как ожидается, будут поддерживать широкий спектр платформ. В тоже время, делая комплексные прогнозы, ускорение с графическим API не всегда является лучшим выбором: традиционно, рабочий стол пользовательского интерфейса на устаревшем железе иногда лучше запустить с устаревшей отрисовкой на базе CPU.

Таким образом, что не удивительно, одним из направлений исследований в будущих версиях Qt является создание графического стек, и в частности, Qt Quick, более гибким, с поддержкой различных графических API, а также с поддержкой программного рендеринга.

Такие исследовательские работы часто приводят к полезным эффектам, и эта запись об одном таком. Простой Qt модуль включающий интеграцию с Direct3D 12 в отдельном Qt окне - или в качестве альтернативы приложение основанное на QWidget - и делающий это процесс легким для начала экспериментов с современными методами D3D, в то время как Вы продолжаете наслаждаться знакомыми API, инструментами и средой разработки Qt и предлагаемой ей экосистемой.

  • EVILEG
  • Статья
  • 1 апреля 2016 г. 23:34

Три шага к успешной встраиваемой системе с Qt

emdedded, Qt, встраиваемые системы

Разработка встраиваемых продуктов требует трех главных шагов: выбор аппаратной платформы, выбор операционной системы, и разработка пользовательского интерфейса (UI). Все три этих шага тесно связаны друг с другом и оказывают существенное влияние на время выхода на рынок, расходы по проекту и конечное качество продукта. Очень важно выбирать подходящую аппаратную платформу, которая также поддерживает отличную операционную систему и лучшие инструменты для разработки пользовательского интерфейса.

1. Выбор вашей аппаратной платформы

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

  • Имеется ли стабильная линия поставок/гарантий/долговременной поддержки/доступности? Если выбранная аппаратная платформа не доступна более шести месяцев, всё время разработки будет потрачено впустую и приведёт к значительным задержкам в проекте и увеличению стоимости.
  • Является ли эта платформа качественным продуктом? Многие разработки не сделаны с точки зрения лучших практик, что может вызвать сильную головную боль при будущих сбоях. В итоге замена одного бренда на другой приведёт к увеличению стоимости.
  • Является ли продукт гибким в плане обновления, что предоставит уменьшение времени и стоимости разработки для будущих ревизий?
  • EVILEG
  • Статья
  • 27 января 2016 г. 21:27

Использование Qt 3D для визуализации музыки

Audio, QML, Qt, 3D, quick

Перевод официальной новости, автор Titta Heikkala

Так как идёт развитие Qt 3D модуля, Мы хотели бы предоставить его на проверку и тестирование того, как можно визуализировать музыку, используя этот модуль. Результатом этого эксперимента стал новый пример, Audio Visualizer Example, для Qt 3D модуля.

  • EVILEG
  • Статья
  • 15 января 2017 г. 17:49

PyQt5 - Урок 004. Использование QSettings

PyQt5, QSettings, Qt, python

Ознакомимся с использование QSettings в PyQt5. Для этого предлагаю написать небольшое приложение, в котором будет один единственный чекбокс, состояние которого мы будем сохранять в настройках. Состояние чекбокса будет сохраняться по клику на данный чекбокс. После закрытия программы и повторного его открытия чекбокс будет выставлен с тем состоянием, в котором он был при закрытии программы.

  • EVILEG
  • Статья
  • 13 января 2017 г. 20:15

Qt/C++ - Урок 058. Подсветка синтаксиса HTML кода в QTextEdit

HTML, QSyntaxHighLighter, Qt, QTextEdit, QTextDocument

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

Подсветка синтаксиса HTML в QTextEdit будет выглядеть следующим образом:

Реклама
Последние пройденные тестирования
  • namat
  • 22 июня 2017 г. 5:27

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

Результат - 91 баллов

  • namat
  • 22 июня 2017 г. 5:22

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

Результат - 100 баллов

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

Результат - 80 баллов

Последние комментарии
  • EVILEG
  • 16 июня 2017 г. 12:15

Qt/C++ - Урок 023. Перетаскивание QGraphicsItem на QGraphicsScene мышью

Не, не совсем так. Здесь нужно будет учитывать сдвиг позиции курсора относительно координаты (0, 0) в координатной системе MoveItem. Получается тогда так: Координаты сдвиг...

  • damix
  • 15 июня 2017 г. 21:39

Qt/C++ - Урок 023. Перетаскивание QGraphicsItem на QGraphicsScene мышью

Лучше где-то в классе MoveItem объявить QPointF mouseCoords; А потом void MoveItem::mousePressEvent(QGraphicsSceneMouseEvent *event){ mouseCoords = event->pos();}void...

  • EVILEG
  • 15 июня 2017 г. 13:27

QML - Урок 007. ListView Qml. Динамическое создание и удаление элементов

Не хотелось бы повторяться. В статье по сигналам и слотам в QML есть вариант использования C++ объекта. Там используется тип Connections , который можно настроить на сигн...

Сейчас обсуждают на форуме

QEvent. Переопределение метода event().

EVILEG, благодарю, что все разъяснили. ;)

  • EVILEG
  • 17 июня 2017 г. 13:13

QWizard

Думаю, что это возможно. У QWizard есть метод setButtonLayout , который устанавливает, какие именно кнопки могут быть видны на страницах. Так вот, у QWizardPa...

  • DrGen
  • 15 июня 2017 г. 17:10

Ключи QMultiMap в роли кнопок

Большое спасибо! даже не думал, что вопрос окажется интересным.

Вопрос по QTableWidget ?

Спасибо )