Обновить
32K+

Qt *

Кроссплатформенный инструментарий разработки ПО

0,15
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Делаем простой рисовальщик в PySide6

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели8.3K

Здравствуйте, уважаемые Хабравчане и гости!

Это моя первая статья на Хабре. Она не претендует на какой-либо уровень, а предназначена в первую очередь для тех, кто так же, как и я до написания этой статьи, находится в поиске решения проблемы рисования в PySide6.

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

Читать статью

QML: отличие оператора ":" Qt.binding от Binding

Уровень сложностиСредний
Время на прочтение2 мин
Охват и читатели3.4K

В чём отличие ":" от Binding? Изучаем тонкости присваивания значений переменным в QML. Небольшая заметка, которая поможет вам сделать код понятней, и избавит вас от неожиданного поведения вашей программы.

Читать далее

Отправляем Qt-логи с метками в Sentry

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели2.5K

Привет всем.

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

Читать далее

Шейдерный осциллограф в 140FPS или как обойти невозможность передать огромный массив переменных из C++ в QML/Shader

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели8K

Доброго времени суток всем хабровчанам!

Как-то пришлось работать с медленным промышленным ARM с кастомным линуксом на борту. Было там одно слабое ядро и 512 мегабайт оперативной памяти, которая выделялась на низком уровне частично для видеопамяти. Был там полностью огромный графический интерфейс на QML, внутри которого был и осциллограф. В то время он был реализован на QChart, и показывал максимум 20 FPS, поскольку рисовался полностью слабым процессором. Мне это жутко не нравилось. Я привык видеть глазами минимум 60 FPS, так что я серьёзно занялся этой проблемой.

Читать далее

Тысяча и одна библиотека С++

Время на прочтение65 мин
Охват и читатели103K

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

Столкнувшись много раз подряд с тем, что найти что-то толковое довольно непросто, я решил попробовать распутать это узел и предложить для русскоязычных читателей свой справочник классных библиотек на С++. Я исходил из этого источника. Это очень многогранный и объемный список библиотек языка С++, но, скажем так, у меня были к нему вопросы. Потому я сделал перевод, затем значительно улучшил его в плане содержания (далее объясню, как, почему и зачем). На выходе получилось около 1000 библиотек. Как в сказке). Они, конечно, не покрывают все возможные задачи и предметные области, но поверьте, они затрагивают действительно многое.

Прикоснуться к сокровищнице языка С++

PUSSY – швейцарский нож от мира ПО. Погружаемся в систему Свойств #ШБР2

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели3.1K

PUSSY (Python Utilitarian Script System for You) - это кроссплатформенный программный комплекс, который позволяет ускорить разработку приложений с графическим интерфейсом на языке Python и PySide6. Его ключевой фичей является быстрое создание раздела с пользовательскими настройками, достаточно просто объявить перечень Свойств в Специальном контейнера, а система сама позаботится обо всем остальном. Нажимайте на "Читать далее" чтобы узнать как с этим работать и как можно самостоятельно расширить его возможности под собственные потребности...

Читать далее

Небольшая доработка QMap в Qt

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели6.4K

Решаем одну старую проблему с QMap. Есть многоуровневый QVariantMap, то есть один вложен в другой и так много раз. И надо иметь возможность изменять в любом месте иерархии ключ/значение.

Штатные возможности Qt 4 не предусматривают изменение части дерева, только полная перезапись целиком всей ветки дерева (в Qt5,6 не знаю).

Но у нас появилась реализация, выносим на ваш суд и делимся результатами.

Читать далее

Разработка интерфейса для Windows — это боль

Время на прочтение5 мин
Охват и читатели55K

Последние несколько дней я пытался найти библиотеку, которая бы позволила мне писать на C++ программы с GUI. Мои требования были довольно просты:

Достаточно только поддержки Windows

Разрешено коммерческое использование

Простая стилизация, в том числе и тёмный режим

Результатом должен быть единый файл .exe размером меньше 40 МБ без или с минимальным количеством зависимостей

Написание части программы с GUI не должно занимать больше времени, чем сама функциональность

Читать далее

И снова клон десктопного клиента Telegram

Время на прочтение5 мин
Охват и читатели25K

Казалось бы, сколько их уже есть, зачем еще один? Но случилось совпадение многих вещей - у меня было свободное время, желание что-то сделать, неудовлетворенность работой официального клиента и нежелание изучать существующие альтернативные версии и перечень их отличий. В результате я реализовал свой Луна-парк, с нужными мне фичами. Подробнее под катом.

Читать далее

Python logging — вывод лога на QTextWidget (PyQt6)

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели6.6K

Было консольное Python приложение, в котором пишутся логи через стандартный модуль logging. Затем прикрутил GUI на PyQt6, конечно, хочется продублировать логи в какой-нибудь виджет в уголочке. Категорически не хочется ничего менять в консольной части, и спокойно использовать дальше стандартный logging.

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

Читать далее

Засады многопоточности

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели16K

В данной статье я опишу свои самые свежие и яркие впечатления от многопоточного программирования. Это мои впечатления, мой опыт  и я буду рад, если он будет полезен другим программистам.

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

Предсказанное сбылось, как говорится, по полной программе. Думаю, что озвученные далее проблемы для кого-то не станут новостью, но будут и те, кто о них не подозревает, как не подозревал и я. А потому захотелось их зафиксировать и поделиться, с чем пришлось столкнуться.  Ну, и рассказать, как я выкрутился, попав в не совсем привычные для меня ситуации (в автоматном программировании, подчеркну, они не возникли бы в принципе).

Итак, создав ранее тест потоков (о нем подробнее см. [1]), гоняя его многократно и в разных режимах, я заметил, что пусть редко, но выскакивают некорректные результаты. В подобных случаях я грешу обычно на себя. А в данном случае тем более, т.к., что там скрывать, имею весьма небольшой опыт использования потоков.

Но в процессе экспериментов обнажились проблемы, которые сложно списать на недостаток опыты. Что-то при этом удалось преодолеть сразу, с чем-то пришлось повозиться, но были и те проблемы, которые не удалось поправить, даже при наличии достаточно большого опыте в программировании вообще.  О последнем, не об опыте, конечно, а о проблемах, и пойдет далее речь... И даже не о проблемах, а о довольно нежданных и негаданных "засадах", возникших на пути освоения многопоточности.

Читать далее

Все секреты многопоточности

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели27K

Disclaimer. Данная работа не повлияла на мои взгляды на программирование, но повлекла достаточно радикальные изменения в подходах к проектированию автоматных объектов.  Теперь, если процесс  автономен и/или не предъявляет требований  к синхронизации, он может использовать другие механизмы параллелизма, не переставая при этом быть автоматным по сути. А почему так случилось, что этому предшествовало  и что это за изменения, вы прочтете далее.

Это не самая большая моя статья (так я думал, начиная ее), над которой я работал, пожалуй, дольше и больше, чем над другими. Но это точно первая моя статья, в которой автоматы и ВКПа не будут главной темой. Тема потоков для меня достаточно необычна, т.к. я совсем не фанат многопоточного программирования. Но,  тем не менее, занимаясь параллельным программированием, время от времени возвращаюсь к теме многопоточности. И вот, чтобы добыть какие-то аргументы для критики и одновременно попробовать найти практическое применение потокам, я решил в этот очередной раз более плотно заняться потоками. А что из этого получилось,  читайте далее.

Читать далее

Гроубокс с числовым программным управлением (ЧПУ)

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели5.8K

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

Читать далее

Ближайшие события

Шахматы. От начала до читов

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели17K

Как-то пару лет назад youtube начал мне подсовывать шахматные видео. Смотрел их, и спустя какое-то время начал играть. Сначала против компа на телефоне, затем на lichess. В какой-то прекрасный вечер мне надоело проигрывать и задался вопросом как бы не проигрывать или после отыгрываться. В итоге игра превратилась в написание чита.

Читать дальше →

Разработка Desktop приложений на Python и библиотеки PySide6/PyQt6. Часть 2. Знакомство с виджетами и Qt Designer

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели74K

Мы продолжаем изучать PySide6/PyQt6 и сейчас мы с Вами познакомимся с виджетами, компоновкой и Qt Designer

Ссылка на 1 урок с установкой PySide6 и создания первого приложения.

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

Читать далее

Разработка Desktop приложений на Python и библиотеки PySide6/PyQt6. Часть 1. Установка и первое приложение на PySide6

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели61K

Сегодня мы с Вами рассмотрим прекрасную библиотеку PySide6, которая является оберткой для взаимодействия с Qt при помощи языка Python, которые позволяет вам использовать Python для написания desktop-приложений Qt.

Читать далее

Окно индикации какого-то процесса на Qt

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели5K

Итак хочу поделится большой радостью ибо наконец-то сделал универсальное всплывающее окно (на Qt) для индикации (логгирования) хода выполнения каких-то долгих команд.

Основная идея универсальности в вызове у об'екта слота по наименованию , передача параметров через QVariant (до 10шт.), возврат результата тоже через QVariant.

Все это реализуется без проблем через вызов метода invokeMethod.

Через параметры QVariant мы можем передавать и возвращать все , что угодно - какие-то свои классы, главное не забыть в конце определения таких классов добавлять макрос Q_DECLARE_METATYPE(имя вашего класса)

Читать далее

Тестируем многоядерный процессор методом Кнута и Python’а

Время на прочтение11 мин
Охват и читатели8.8K

В 1978 году вышел третий том монографии Дональда Кнута «Искусство программирования», где автор рассматривает алгоритмы сортировки и поиска. Помимо самих алгоритмов описаны аппаратные характеристики компьютера и их влияние на производительность при работе с алгоритмами.

В 2024 году мы с вами возьмём классические алгоритмы сортировки и посмотрим, как работает современный многоядерный процессор при сортировке нескольких массивов на одном и нескольких логических ядрах. Мы напишем приложение с графическим интерфейсом (GUI) на фреймворке Qt, обойдем глобальную блокировку интерпретатора (GIL), воспользуемся несколькими потоками, на один из которых переложим выполнение асинхронного цикла событий, и распараллелим этот поток для реализации параллельных вычислений.

Читать далее

Использование Cocoapods для приложения Qt на примере Google MLKit

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели1.4K

Возникла необходимость встроить MLKit в приложение айос. Началось с того, что по каким-то причинам используемые в приложении (андроид и айос) zbar и zxing (работали параллельно для улучшения результатов на обоих ОС) стали плохо работать. В чём проблема я так и не понял, потому-что решил попробовать MLKit – тем более, что они обещали поддержку как для андроида, так и для айос. А ещё потому, что клиенты давно просят добавить распознавание текста – совсем я их разбаловал сканами штрихкодов, VIN (приложение для СТО) и т.п. А тут ещё добавляем новый складской функционал, где для инвентаризации и приёмки нужно много вводить текста, и это на мобильном девайсе. В общем, решено было выбросить zbar/zxing связку и воспользоваться возможностями Google MLKit.

Читать далее

Zoom в Qt виджете

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели8.4K

Пошаговая инструкция по созданию отрисовываемого Qt-виджета с возможностью зума и навигации для начинающих.

Читать далее