Pull to refresh

Comments 72

Было бы неплохо если скрины бы добавили для наглядности. Есть, конечно, специ, которые взглянув на код сразу представляют картину, но я, простите, обычный смертный. Если не трудно, приложите скрины.
Хорошо, сейчас сделаю.
Когда будет достаточно кармы перенесите в блог Qt Software

Сам использую Qt понемногу… выбирал гуи когда, выбрал кьюте из-за кросплатформености… но жаль минус один есть сильный, в винде что бы работала хоть та же программа Хеллоу ворлд надо в комплекте давать ещё и библиотеку размером в метров 7… прога весит пару кб, а библиотека дофига… пожалуй это единственный минус…
В линуксе проще, там почти у всех кьюте уже установлен ^_^
Кстати, если собрать Qt как static и проект слинковать статически, разве это не поможет? Каким будет размер бинарника?
Немного меньше… люди много эсперементировали с этим, пару метров максимум уменьшали, убирая всё что можно убрать, через статик и т.п., но всёравно многовато получется…
Учитывая что современные программы тащат с собой .Net, MS XML Parser 6.0, VC 2005 redistrable и т.д., то пара библиотек на 14 мегабайт (QtCore.dll и QtGui.dll) никого не пугают.
Разница не в размере самой программы, а в том, сколько пользователю качать.
Первые (.Net, MS XML Parser 6.0, VC 2005 redistrable ...) наверняка уже установлены в системе. А Qt или Gtk придется ставить.
Ява машину тоже например необходимо ставить в систему…

А все dll из состава Qt можно просто скопировать один раз в system32 и забыть про них.
UFO just landed and posted this here
На Яву можно рассчитывать, а вот рассчитывать на то, что пользователь будет копировать dll себе в system32 или у него стоит прога на Qt, которая их уже скопировала туда, сложно.
UFO just landed and posted this here
Да можно, просто все-равно их тащить придется в инсталлере. Только если проверять и если нет, то загружать
UFO just landed and posted this here
net и jre сейчас ставят чуть ли не по дефолту вместе с виндой, в крайнем случае пишут в системных требованиях, об установке gtk и qt должен позаботиться разработчик
дык разработчик об этом и заботиться созданием инсталлера
Дык речь изначально шла о том, что размер инсталлера получается слишком большой для «Hello World» по сравнению с теми же net и java. Да и нет, насколько я знаю, хотя бы что-то вроде qt или gtk redistrable для винды, чтоб можно было указать в требованиях, как и нет репозиториев и менеджеров пакетов к ним, которые могли бы все зависимости вытянуть.
Я мало знаком с Qt, но вроде бы есть отдельные инсталляторы библиотеки. Так что не обязательно в каждый инсталлятор утилит типа «helloworld» вставлять всю Qt. Тем более, если у пользователя уже стоит Qt более новой версии, и с большой вероятностью она совместима.
Пользователи сейчас качают из сети сериалы и гигабайтные образы игр, так что несколько мегабайт, я считаю, ничего не значат.
Если все правильно слинковать, то размер слинкованных от Qt библиотек будет прямо пропорционалей количеству используемых классов. А в небольшой програмке их не может быть много.
статично собраный релизный бинарник будет весить 4.5+ Мб, если сжать upx-ом, то 2+ Мб
Важнее не размер исходных файлов, а то как хорошо их можно сжать в тот же архив или установщик. А данные библиотеки все очень хорошо поддаются сжатию, раза в 1.5 — 2 точно.
14 Мб библиотек, которые требуются для запуска програм сжимаются в zip-архив до 5.5 Мб.
давайте смотреть на вещи реально, ок? как много серьезного софта — это «проги на пару кб»?
я думаю таких нет в принципе. а чем сложнее (не в плане понимания, а плане архитектуры, количества кода и т.д.) проект, тем меньше болит голова у разработчиков о том, сколько же линкованного кода с собой потащит их продукт.
и я думаю семь метров в виде «хвостика» к 300-м мало кого заставят страдать :)
особенно с учетом всех тех приемуществ, которые получашь используя кьют.

Вы так говорите, как будто все ваши программы весят пару килобайт. Если это не очередной сиди-эджектор, то размер QT по сравнению с размером программы не так уж и сильно выделяется.
В линуксе не факт, что Qt установлен, но есть менеджер пакетов, поэтому, о том, что Qt может не оказаться можно просто забыть. Под Windows ИМХО лучшее решение — сделать инсталятор Qt и писать на оф. сайте программы «Если при запуске программы появляеся <такое-то> сообщение об ошибке, то Вам нужно скачать и применить ещё и вот этот инсталлятор.»
UFO just landed and posted this here
>Использовать такие крупные заголовочные файлы как, и др.
и далее… что-то, по-моему, съехало, видимо из-за <, а не < в имени файла

А так продолжайте, конечно, очень интересная тема

< имелось в виду

как-то странно хабр с сущностями обращается, в два прохода :)
черт и предпросмотр не помог… в общем & lt; (без пробела)
Спасибо, сейчас поправлю
Спасибо всем за добрые отзывы
Немного критики, если позволите. Статья, как я понял, ориентирована на новичков. В этом случае у меня, будь я новичком, сложилось бы достаточно сумбурное представление.
«При удалении родителя автоматически удаляются все его потомки, что очень удобно» — с какой стати? В с++ такого не предусмотрено. Здесь, если Вы затронули такое поведение, вероятно, надо хотя бы кратко рассказать про класс QObject.
«На следующей строчке мы указали макрос Q_OBJECT, который указывает предпроцессору Qt что данный класс будет использовать дополнительные возможности Qt, например, систему сигналов и слотов.» — каких сигналов? каких слотов? Что это такое вообще? Далее идет краткое объяснение: «У каждого объекта Qt могут быть свои сигналы и слоты,...» опять же, что значит «каждый объект Qt»? Любой класс? Тогда это неверно. Вероятно QObject? Тогда следует все же провести краткий экскурс в этот класс.
Я согласен с данным замечанием, но если бы в данной статье я начал бы подробнее рассказывать по сигналы и слоты, она получилась бы раза в два больше. Поэтому я решил показать простой пример, а более подробно разобрать класс QObject и производные от него в следующей статье
Может быть тогда стоило изначально проектировать статью с таким учетом? То есть не упоминать о тех вещах, которые не могут быть сейчас раскрыты хотя бы для частичного понимания.
Я хотел в первой статье показать практический пример, который можно взять, скомпилировать и посмотреть что получится. А более углубленные разъяснения оставить на потом. Может быть такой подход и не совсем правильный…
Это наверное зависит от читателя. Кто-то не знает с чего начать, и скопировать-вставить-скомпилировать — это для него выход. Кто-то не может сдвинуться с места, не поняв как оно в итоге работает.
про IDE, можно было бы упомянуть еще QT Creator…
QT Creator все еще находится в состоянии беты. Когда я пытался его использовать, то столкнулся с проблемой что он использует системную локаль для отображения исходных кодов. Учитывая что я пишу на разных компьютерах с разными операционными системами и локалями, это затруднило его применение.
Хотя это, конечно, мой недочет что я его забыл :)
UFO just landed and posted this here
Qt Creator наше ффсе… правда только если его регулярно обновлять из снепшотов
Вы во всех трех программах не удаляете dialog, что нехорошо.
Он удаляется автоматически при завершении программы. Дополнительных действий со стороны программиста в данном случае не требуется.
Кстати да, я почему-то не обратил внимание. Действительно диалог нужно удалять в данном случае. Если бы Вы его создали статически, то он бы удалялся при завершении функции main. А так удаляется только указатель.
«Он удаляется автоматически при завершении программы» — поясните, пожалуйста, ведь у диалога же нет парента в данном случае.
UFO just landed and posted this here
Во-первых можно подключить сигнал закрытия последнего окна к слоту deleteLater диалога.
Во-вторых можно создать диалог статически.
можно перед ретерном, но после app.exec, обычно туда ставят «правильное» удаление объектов перед завершением приложения
UFO just landed and posted this here
Так то оно так, но нужно говорить об этом в статье. Особенно в статье, которая претендует на аудиторию из новичков. Иначе данное поведение будет списано на «фичу Qt» (особенно в свете фразы «При удалении родителя автоматически удаляются все его потомки, что очень удобно») и будет делаться повсеместно.
Когда думал как уменьшить число строчек кода в примере случайно удалил из него эту:

dialog->setAttribute(Qt::WA_DeleteOnClose);

Если установить это атрибут для главного окна, то оно автоматически будет удалятся при закрытии.
Для уменьшения числа строчек можно было сделать так:
QApplication a(argc, argv);
QLabel l("Hello, World!");
l.show();
return a.exec(); :)
В то же время я не хотел отказываться от создания диалогового окна что бы повысить наглядность примера :)
Ну такую реализацию тоже можно было упомянуть. Ибо, вспоминая себя, как начинающего пользователя Qt — до некоторого момента я свято верил, что такие вещи как QLabel, QPushButton и прочие мелкие виджеты не могут быть никак показаны кроме как на диалоге или другом более общем виджете (QMainWindow например) :)
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Ну и в-третьих написать что-то вроде:
int ret = a.exec();
delete dialog;
return ret; :)
UFO just landed and posted this here
ну вот, меня опередили (я тоже собирался начинать цикл статей по C++/Qt);) ну тогда если что помогу…
Рыночную экономику ещё не отменили, что плохого в конкуренции?)
а смысл писать одно и тоже двум разным людям?;)
Как вариант можете написать статьи об использовании Qt для embedded systems или для Windows Mobile.
хехе, чтобы такое писать это знать надо;) посмотрим, что будет дальше, может какую-нить ветку напишу
В комментариях выше этот вопрос уже обсуждался. Она еще находится на стадии бета тестирования. Но я с нетерпением жду когда будет релиз
Отлично, спасибо! :) а если у меня есть баш-скрипт, который вызывает ffmpeg с определёнными параметрами и конвертирует видео, мжно ли к нему прикрутить такой GUI со статусбаром? Извиняюсь заранее если вопрос глупый
Можно. Для этого есть класс QProcess
Для прикручивания GUI к скриптам уже давно и успешно применяется Tcl/Tk. Не тратьте время на Qt (в данном случае). Не подходит он для написания морд к скриптам.

Вызов скрипта:

set scriptOutput [exec myScript.sh]
Sign up to leave a comment.

Articles