• Портируем код с Qt 1.0 на Qt 5.11

    • Перевод
    Недавно вышел Qt 5.11 и мне подумалось, что сейчас самое время обновить до него кое-какие мои проектики на Qt 1.0… Ладно, шучу :) На самом деле мне стало интересно, насколько хорошо за все эти годы развития фреймворка Qt нам удавалось сохранять обратную совместимость кода.

    Qt гарантирует совместимость на уровне кода и бинарников при обновлении между минорными версиями фреймворка (и мы серьёзно относимся к этому обещанию). Вы не должны переписывать (или даже перекомпилировать) свой код при переходе на другую минорную версию Qt. Однако переходы между мажорными версиями требовали от нас идти на некоторые жертвы ради прогресса. С релиза Qt 1.0 в 1996 году мы ломали совместимость кода четыре раза: в версиях 2.0, 3.0, 4.0 (ох, это было болезненно!) и 5.0.

    Мы старались даже в мажорных версиях сломать как можно меньше всего, но всё же это приходилось делать. Отсюда возникает вопрос: насколько сложно портировать приложение, написанное во времена Qt 1.0 до современного Qt 5.11?

    Для ответа на этот вопрос я взял пример кода, который поставлялся с документацией на Qt 1.0 и постарался собрать его с помощью Qt 5. Наши публичные архивы содержат изменения начиная с версии 1.41, так что мне пришлось изрядно покопаться в дрейнейшей истории, пройти через логи четырёх разных систем контроля версий… но это я уже отвлекаюсь. Проект, который я планирую собрать, называется «t14» — поскольку это иллюстрация к 14-ой (и последней) главе оригинального руководства.

    И вот, что мне пришлось проделать для его сборки.
    Читать дальше →
  • О лицензиях Qt (и немного о компании)

      В предыдущей статье про Qt roadmap я обещал рассказать про Qt 3D Studio и текущую ситуацию с лицензиями. Qt 3D Studio уже было выпущено два (пока писал статью, вышел третий) внутренних релиза, но статьи про неё пока не будет, так что сегодня расскажу про лицензии.


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


      Но речь пойдёт не сразу про лицензии, сначала я хочу рассказать немного о компании, чтобы было понятно, кто именно сейчас занимается разработкой/распространением фреймворка и вообще стоит за Qt.

      Читать дальше →
    • Самая нужная программа на свете

        image
        Какими программами постоянно пользуются люди? Если подумать над этим вопросом, то окажется, что список этот не такой уж большой. К постоянно используемым программам можно отнести: саму операционную систему, файловый менеджер, текстовый редактор, браузер, мессенджер. Это именно тот базовый набор, которым пользуется на компьютере практически каждый человек. Требования к таким программам должны быть высокими: безотказная работа, быстрое выполнение всех функций, понятный и удобный интерфейс.

        Можно сказать, что вышеперечисленный набор программ — это самые нужные программы, которыми пользуется человек в цифровую эпоху. Этот список покрывает все базовые потребности человека-пользователя. Или не все? Есть ли еще одна базовая потребность, которая не учтена в вышеприведенном списке самых необходимых программ? Является ли эта потребность самой важной из тех, что должен автоматизировать компьютер? Для меня такая потребность есть, но в списке самых используемых программ ей места не нашлось. Что же это за потребность?
        Ранее компьютер считался устройством для проведения вычислений...
      • cool-old-term — старый добрый терминал

          Некто с никнеймом Swordfish90 разрабатывает эмулятор терминала cool-old-term с интерфейсом, напоминающим старые CRT мониторы. Автор признаётся, что мечтал реализовать подобное приложение со времени, когда он впервые сыграл в Fallout III. Swordfish90 пытается сделать олдскульный, но вместе с тем настраиваемый и легковесный эмулятор терминала. Проект разрабатывается с использованием Qt5 и QtQuick, разработка ведётся на Github.


          Скрытый текст

        • SASM – IDE для ассемблера

          Здравствуйте, уважаемые хабравчане!

          Данным постом хочу представить сообществу проект, который время от времени писался мной последний год: SASM (SimpleASM) — IDE для разработки программ на языке ассемблера x86 и x86-64.

          image

          SASM — простая кроссплатформенная (доступна на Windows и Linux) среда разработки для языков ассемблера NASM, MASM, GAS, FASM с подсветкой синтаксиса и отладчиком. Программа работает «из коробки» и хорошо подойдет для начинающих изучение языка ассемблера. Основана на Qt. Распространяется по свободной лицензии GNU GPL v3.0.

          Исходники лежат в репозитории на GitHub.
          Бинарники можно скачать на сайте программы.

          Под катом Вы найдете немножко истории и более подробное описание возможностей.
          Читать дальше →
        • Проверка фреймворка Qt 5

            Qt and PVS-Studio
            Инструменты статического анализа кода позволяют устранить множество ошибок ещё на этапе написания текста программы. Например, можно быстро выявить и устранить опечатки. Некоторые программисты искренне уверены, что они не делают опечатки и глупые ошибки. Это не так. Такие ошибки делают все. Эта статья послужит хорошим демонстрационным примером. Опечатки можно найти даже в таком качественном и оттестированном проекте, как Qt.
            Читать дальше →
          • Ой, у вас баннер убежал!

            Ну. И что?
            Реклама
          • SpeedReader — Qt библиотека для скорочтения

              image

              Предисловие


              Некоторое время назад на Хабре была новость о Spritz — программной реализации техники скорочтения, основанной на быстрой смене слов в виджете с определенным центрированием самого слова внутри виджета, а чуть позже и другая новость. Так как тема довольно актуальная я, недолго думая, решил реализовать нечто подобное и универсальное, с возможностью встраивания такого виджета для скорочтения в программы на различных платформах (win, linux, mac, android). Исходя из этого условия был выбран Qt фрейморк с его широкой поддержкой различных платформ.

              То, что получилось и как с этим работать описано ниже. Кому интересно, добро пожаловать.
              Читать дальше →
            • Как работают сигналы и слоты в Qt (часть 1)

              • Перевод


              Qt хорошо известен своим механизмом сигналов и слотов. Но как это работает? В этом посте мы исследуем внутренности QObject и QMetaObject и раскроем их работу за кадром. Я буду давать примеры Qt5 кода, иногда отредактированные для краткости и добавления форматирования.
              Читать дальше →
            • Альфа-версия Otter Browser

                Otter Browser, главное окноПока в России под гром фейерверков весело и задорно встречали Новый год, в тайной лаборатории почти соседней нам Польши родилась альфа-версия браузера, который потенциально может стать заменой Opera ветки 12.x. Написан он с использованием фреймворка Qt5 и соответственно, компонента QtWebKit, но в перспективе будет перенесён на QtWebEngine (который, напомню, основан на коде Blink) и, вероятно, будет иметь возможность переключения на Gecko. Впрочем, это всё в будущем. Сейчас же он предлагает следующие возможности:

                • Вкладки, их прикрепление и открепление, боковые вкладки (но текст поворачивается на 90°, без поворота будет работать потом), вкладки внизу окна;
                • менеджер загрузок;
                • история посещений;
                • просмотр cookies;
                • панель поиска;
                • менеджер сеансов;
                • приватные вкладки и окна;
                • закладки;
                • настройка поисковых движков;
                • корзина закрытых вкладок;
                • масштабирование страницы;
                • миниатюры вкладок при наведении на них мыши.

                Ну и ещё по мелочам. Автор подчёркивает, что это не 100% повторение Opera, но по возможности близкая к ней реализация. Как он сам его позиционирует: «Веб-браузер, который контролируется пользователем, а не наоборот». Сама программа изначально разрабатывается как максимально модульная. Упоминавшаяся выше запланированная возможность переключения движков рендеринга — не единственная. Из планируемых функций, например, почтовик и RSS-клиент тоже будут модулями, причём отдельными, но использующими единый интерфейс.

                А теперь подробнее...
              • Melange — DSL для сетевых протоколов

                  Всем программистам рано или поздно приходится передавать данные. Ни для кого не секрет, что библиотек сериализации в Java существует примерно >9000, а в C++ они вроде и есть, а вроде их и нет. К счастью для большинства, несколько лет назад появился Google Protobuf, который принёс достаточно удобный способ определять структуры данных и быстро завоевал всенародную любовь. Это была фактически первая, доступная широким массам библиотека, позволяющая гонять по сети готовые структуры данных, не связываясь при этом с чем-то вроде XML. На дворе был 2008 год.

                  Вернёмся немного назад. В 2006 году простой индийский программист (как бы подозрительно это ни звучало!) Анил Мадхавапедди, один из самых известных сейчас в мире OCaml-разработчиков и автор свежевышедшей книги Real World OCaml, защищал в Кембридже кандидатскую диссертацию. Именно о ней я сегодня вам и расскажу.

                  Анил сразу пошёл дальше, чем Google. Он сразу подумал, для чего люди обычно пересылают по сети какие-то формализованные структуры данных? Чтобы реализовать какой-то протокол. А что такое протокол? Это какой-то конечный автомат. А где мы можем взять хороший пример сложного, хорошо спроектированного и проверенного временем протокола? Да прямо в обычном сетевом стеке! Итак, были взяты набор сетевых структур данных и протоколов: Ethernet frame, IPv4, ICMP, TCP, UDP, SSH, DNS и DHCP и постановка задачи: большая часть этих протоколов (особенно SSH и DNS) реализуются, что называется «руками», а хочется, чтобы не было типичных для C переполнений буфера, все переходы совершались автоматически, это всё можно было верифицировать, и чтобы работало быстро, а не как обычно.

                  Поскольку никто не будет читать диссертацию, сразу скажу: это более чем удалось. По результатам работы были написаны референсные реализации DNS и SSH-сервера и произведено сравнение с BIND и OpenSSH. OCaml-реализации давали по сравнению с традиционными прирост производительности от незначительного, до почти двухкратного. Кроме того была найдена ошибка в RFC на SSH (рабочая группа была уведомлена и RFC исправлен). О том, что было сделано, и как с этим жить, читайте под катом.
                  Мне интересно.
                Самое читаемое