Архив метки: qt

Qt 5: подготовка программы для windows к запуску на других компьютерах

Расскажу, как запустить программу, написанную на C++/Qt для windows, на другом компьютере, где библиотеки Qt 5 не установлены. Вот мы, допустим, установили Qt Creator, создали приложение из одного окна с надписью «Hello World», выбрали для сборки конфигурацию «Выпуск» и нажали заветный зелёный треугольник. Через несколько секунд успешно запустится наша программа. Находим, где же программа лежит. Путь к ней будет примерно такой: D:\…Projects\2013-09-30_HelloWorld\build-HelloWorld-Desktop_Qt_5_2_0_MinGW_32bit-Выпуск\release\HelloWorld.exe. Радоваться рано. Если мы закроем Qt Creator, отправимся по этому пути и попытаемся запустить HelloWorld.exe,то получим следующую ошибку: «Запуск программы не возможен, так как на компьютере отсутствует Qt5Core.dll. Попробуйте переустановить программу.» Точно такая же ошибка возникнет на любом другом компьютере, где мы попытаемся запустить эту программу. Варианты решения:

1. Пересобрать сам Qt, чтобы собранные приложения статически линковались с библиотеками Qt 5 — долго, сложно, программа будет тяжёлая, и заморочки с лицензированием

2. Устанавливать на все компьютеры, где будем использовать программу, библиотеки Qt 5, совместимые с нашей сборкой, и прописывать путь к ним в системной переменной PATH

3. Сложить все необходимые DLL-библиотеки в одну папку с экзешником нашей программы. Получится по сути Portable-версия, которую можно будет хоть с флэшки запускать. Этот способ самый простой, им и воспользуемся.

Порядок следующий:

1. Копируем программу в отдельную папку

2. Запускаем, смотрим имя файла в тексте ошибки

3. Находим этот DLL-файл в папке C:\Qt\Qt5.2.0\5.2.0\mingw48_32\bin и копируем его рядом с экзешником

4. Возвращаемся к пункту 2 и повторяем до тех пор, пока программа не запустится.

Итого у меня по минимуму получился следующий список DLL-библиотек для Qt 5.2:

  • icudt51.dll
  • icuin51.dll
  • icuuc51.dll
  • libgcc_s_dw2-1.dll
  • libstdc++-6.dll
  • libwinpthread-1.dll
  • Qt5Core.dll
  • Qt5Gui.dll
  • Qt5Widgets.dll
  • HelloWorld.exe

Всего размер папки получился 42 Мб, вроде как бы многовато для простого Hello World. Кого это не смущает — уже могут делиться своей программой. А я расскажу теперь, как сократить этот объём хотя бы до 16 Мб, не сильно сложно (для сравнения библиотеки Qt4 от известной программы для хранения паролей KeePassX весят 10 Мб). Библиотеки и программу мы будем просто сжимать бесплатным свободным упаковщиком UPX. Порядок действий:

  1. Качаем программу UPX — версию для windows
  2. Распаковываем скаченный архив
  3. Возвращаемся к нашим DLL-файлам, щёлкаем по каждому правой кнопкой, выбираем «Открыть с помощью» — upx.exe

Вот теперь папка с нашей программой весит 16 Мб, и её содержимое можно спокойно запускать на других компьютерах.

Qt: UTF8 в CP1251 и CP1251 в UTF8

Вовремя пригодилась статья: [Qt] UTF в 1251 и 1251 в UTF. Как раз занимался расшифровкой дампа базы данных main.db от телефона Motorola A1200 (формат базы данных — BerkleyDB4). Самый полезный кусок кода:

QByteArray msg = QByteArray::fromHex("cde5eff0e0e2e8ebfcedeee520f1eeeee1f9e5ede8e5204b4f4e5f544d5f484f53544b4e4620eef220d3cad2d121"); 
QTextCodec *codec = QTextCodec::codecForName("Windows-1251"); 
QString strf = codec->toUnicode(msg); 
qDebug() << strf;

 

inqlude.org — архив библиотек для QT

Сайт http://inqlude.org — каталог библиотек для разработки на Qt. Библиотеки собраны как стабильные, так и недоделанные (бета, альфа и т.п.). Есть ссылки на платные библиотеки. Авторы проекта inqlude поставили перед собой задачу собрать в одном месте информацию обо всех доступных библиотеках Qt.

Из того, что руки зачесались попробовать:

Все библиотеки на сайте перечислены с описаниями, ссылкамина исходники и документацию.