Кроссплатформенное приложение на Qt: Предисловие

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



    Сейчас информации по теме в рунете мало, она разобщена, поверхностна, или уже устарела. В англоязычном варианте есть официальная документация по Qt и Stack Overflow, однако мне кажется, что для изучения всё же больше подходит формат статей с примерами из практики. По ходу я постараюсь давать ссылки на старые посты (будут помечены"*") по соответствующим темам, чтобы добавить систематизации существующему материалу.
    Итак, есть весьма объемный обзорный пост о возможностях Qt, по большей части он актуален и сегодня. Можно выделить два основных направления: поведение и внешний вид. Как программа должна выглядеть и вести себя — описано в соответствующих H I G, и большую часть работы библиотека берет на себя, вплоть до того, что меняет порядок кнопок в стандартных диалогах. Другую же часть, более тонкие и специфичные моменты — придется реализовывать хотя и средствами Qt, но все равно вручную. Например применение изменений в Windows обычно происходит при нажатии на кнопку, в OS X — мгновенно. С отображением тоже все неплохо — приложения не режут глаз, не выбиваются из общего стиля, однако проблем хватает, особенно в OS X: откровенно страшный стандартный календарь, кривые градиенты заголовков таблиц, устаревший groupBox — вот неполный список кандидатов на полировку. А ведь еще дисплеи высокой четкости, глобальное меню, Dock, уведомления. Ограничения отображения при drag-n-drop в Windows, квест с установкой банальных иконок в Linux. Отдельным пунктом идет подготовка к распространению, которая тоже весьма специфична.

    Содержание:

    P.S. Список тем наверняка пополнится, если есть предложения, постараюсь рассмотреть и их.
    iStodo
    Company
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 49

      0
      Только начал смотреть в сторону Qt, вы как раз вовремя…
        –1
        Было бы неплохо также, если бы вы коснулись вопроса, как можно использовать Qt в Visual Studio.
          +1
          А разве здесь есть проблемы?
            +1
            qt-project.org/downloads

            Внизу страницы «Other downloads». Этого будет достаточно, главное настроить параметр «Qt Versions» в аддоне — путь к библиотеке.
            +5
            Было бы неплохо увидеть статью о кросс-компиляции или же просто о методиках сборки кросплатформенных проектов под несколько систем (скажем для continuous delivery).
              +1
              А вот это люто плюсую. Сам пробывал что-то подобное провернуть, но красивого из этого ничего не получилось
              –2
              Qt хорош, но ему пора выходить из тени и перестать маскироваться под стандартное (часто кривое или устаревшее) отображение, разработав свой сильный и стильный UI. Зачастую от использования останавливает именно отсутствие последнего.
                +2
                то есть вы предлагаете положить болт на гайдлайны MacOS/Windows, на привычные для пользователя контролы и т.д.? Не нравится стандартное оформление — никто не мешает вам его поменять.
                  0
                  Нет, вы перегибаете палку, никто не предлагает ломать устои. Я говорю про сильную собственную библиотеку, которая бы могла продвигать Qt, сделать его более аутентичным, составить конкуренцию другим оболочкам и продвигать идею реновации. Разница между стандартным и Qtовым интерфейсом все-таки есть и она заметна глазу. Эта микроскопическая разница сильно раздражает, потому что для меня внешняя эстетика программы имеет большое значение и, уверен не для меня одного, есть факты, которые крайне убедительно говорят об этом. А переключить стили в Qt раз плюнуть.
                  –1
                  Java уже пыталась в свое время так сделать со Swing'ом, результат мы все знаем :)

                  Для создания клевого стильного UI Qt дали миру QtQuick
                    +1
                    При желании, с помощью таблиц стилей можно кардинально преобразить и обычный проект на Qt Widgets, однако если в самом по себе нестандартном UI ничего плохого нет, то куча выбивающихся приложений, в которых большинство стандартных элементов выглядят иначе — это уже проблема.
                      –1
                      Нет же, я говорил про стильный UI :) а swing'ом невозможно было пользоваться еще в начале тысячелетия. QtQuick — устаревший и в эпоху плоского дизайна такое приложение не сможет конкурировать даже с вебсайтом.

                      Готов поспорить, что будь у Qt более продуманная графическая стратегия он сейчас не прозябал бы на задворках IT-революций.
                        0
                        QtQuick — устаревший и в эпоху плоского дизайна такое приложение не сможет конкурировать даже с вебсайтом.
                        Там как раз все ориентировано на плоский дизайн, возможно вы с чем-то перепутали.
                        Готов поспорить, что будь у Qt более продуманная графическая стратегия он сейчас не прозябал бы на задворках IT-революций.
                        Дело не в графической стратегии, скорее в том, что очень сильный акцент на веб и мобильные устройства, десктоп приложения нынче не в почете. Тут и порог вхождения выше, и денег заработать гораздо труднее.
                          0
                          Там как раз все ориентировано на плоский дизайн, возможно вы с чем-то перепутали.

                          Мне попадаются только вот такие изображения с глянцевыми поверхностями а-ля виста и коктейлем из плоского и псевдо-3d. Вы уверены, что я все еще что-то путаю?
                            +1
                            Уверен, на скриншоте среда разработки (визуальный редактор интерфейса, если конкретнее). Возможности кастомизации интерфейса у квика сумасшедшие, даже просто в силу того, что до недавнего времени стандартных контролов не было, все элементы были просто (комбинацией) прямоугольников. Вот пример плоского приложения.
                              0
                              Это почти то что мне нужно. Спасибо!
                              0
                              Да, путаете :)

                              QtQuick позволяет оперировать любыми графическими примитивами, в том числе градиентами, но и не ограничиваясь ими. В этом плане QtQuick гораздо мощнее, чем HTML+CSS+JS и полностью покрывает все их возможности
                                0
                                А еще там есть шейдеры, частицы и анимации из коробки. Это не упоминая про удобнейший property binding и возможность расширить что угодно на C++.
                                  0
                                  Если он такой крутой, как вы говорите, то где же это все? Что разрабатывают на Qt сейчас? Какую нишу он занимает?
                                    0
                                    Nokia написала на нем ОС целиком, потом пришел злой СЕО из Microsoft и закрыл уже готовое направление. Дальше Digia купила Qt, и решила, что будет развивать его в сторону мобильных ОС, а относительно полноценная поддержка Android и iOS появилась только в самом конце прошлого года.
                                      0
                                      Это Maemo(MeeGo) или последний Симбиан? Какую часть они написали «целиком»? А то что MS закрыли направление — предсказуемо, зачем развивать конкурента самому себе да еще и на базе linux!
                                        0
                                        Это MeeGo, на этой системе весь интерфейс и большая часть демонов была написана на Qt.

                                        Его текущий наследник — SailfishOS еще дальше продвинулся в использовании Qt, там уже весь интерфейс сделан с помощью QtQuick.
                                          0
                                          В MeeGo весь интерфейс системы, стандартные приложения. Закрыли проект задолго до покупки компании.
                                            0
                                            Говорят, что сделка планировалась давно, так что это очень даже своевременный шаг со стороны MS.

                                            А вы, я смотрю уже покушались на святая-святых — менеджер окон :) Почему отказались от попыток с тем же QtQuick, он же стабильно работает поверх Wayland?
                                              0
                                              Покушались на окружение целиком, в 2011 году QtQuick только появился, да и в той же статье я таки написал, что стоило использовать Qt.
                                                0
                                                Реванш брать планируете? :)
                                                  0
                                                  Нет, давно уже переехали на OS X в качестве основной системы, тайлинг на планшетах уже есть в Windows и Ubuntu.
                                        +1
                                        Почти все приложения, которыми я пользуюсь ежедневно, что на десктопе, что на телефоне — написаны на Qt.

                                        + как уже сказали выше — относительно недавно появилась официальная поддержка iOS, Android, пилится поддержка Windows RT (в том числе Windows Phone).
                                          0
                                          Как ваше впечатление от Jolla? Жить будет?
                                            0
                                            Сама система идейно великолепна, но еще чувствуется иногда Beta статус.

                                            Железо тоже очень неплохо — все плавно и клёво + держит батарейку в среднем 3-4 суток.

                                            Так что я считаю, что жить будет — главное дать разогнаться.
                                              0
                                              Если бы вам предложили взамен iPhone 5s, поменяли бы? )
                                                0
                                                Нет :) Jolla мне нравится гораздо больше
                                                  0
                                                  Что-то разрабатывать под Sailfish пробовали/планируете?
                                                    0
                                                    В процессе создания очередной читалки, на основе кодовой базы FBReader'а.
                                          +1
                                          Ответили уже фактически. Лично мое мнение — технология настолько мощная, что программисты, как бы это сказать правильно, побаиваются!
                                          От себя добавлю — еще интерфейс Ubuntu Phone полностью на Qt-e.
                                            0
                                            Побаиваются? Это что-то новенькое! :)

                                            Лично мое мнение — технология настолько мощная...


                                            С чем сравниваете? И что сами разрабатывали на Qt?
                                  –1
                                  Дело не в графической стратегии, скорее в том, что очень сильный акцент на веб и мобильные устройства, десктоп приложения нынче не в почете. Тут и порог вхождения выше, и денег заработать гораздо труднее.


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

                                    Ого, вот это новости! А может история Qt с Trolltech все-таки в 1992 году началась?)
                                      –1
                                      Я не такой ярый фанат Qt, поэтому для меня история началась именно с даты покупки Нокией и четвертой версии. Думаю не для меня одного, так что, в следующий раз не удивляйтесь :)
                            0
                            Яро плюсую статью и буду дальше плюсовать, если будет затронут вопрос взаимодействия с периферийными устройствами (работа с COM портами и т.д.) Причем хотелось бы видеть кросплатформенные решение.
                              +1
                              Чем вариант с QSerialPort не устраивает?
                                +1
                                QSerialPort уже входит в Qt 5.2, нет смысла во внешнем модуле
                                  +1
                                  Согласен, тем не менее по первой ссылке это написано во второй строке, при этом по-русски, и со списком поддерживаемых платформ.
                                    0
                                    Обрадовали.
                                    Честно, не особо пока вдавался в подробности, но он точно кросплатформенный? А то мне хватило установок Prolific дров и попытки связать Parallels с полиграфом, который через USB, на Маке. Не завёл, Parallels виснет, что бы не делал.
                                      +1
                                      Там есть табличка с поддерживаемыми платформами и степенью поддержки.
                                0
                                Добавлена статья о кастомизации дизайна с помощью таблиц стилей (QSS).
                                  0
                                  Добавлена статья о публикации Qt приложений в Mac App Store.
                                    0
                                    Добавлена статья по сборке дистрибутивов для распространения

                                    Only users with full accounts can post comments. Log in, please.