crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

10 страниц V  « < 2 3 4 5 6 > »   
Ответить в данную темуНачать новую тему
> Секреты и интересные возможности Qt
Litkevich Yuriy
  опции профиля:
сообщение 16.3.2009, 12:12
Сообщение #31


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Интересная особенность Qt Designer'а
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 20.3.2009, 15:02
Сообщение #32


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Немножко заморочился на тему создания и извлечения zip архивов средствами Qt. Посмотреть что из этого вышло можно тут http://vingrad.ru/blogs/sabrog/2009/03/20/...s-zip-arhivami/
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 20.3.2009, 15:12
Сообщение #33


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


SABROG, напиши, пожалуйста, тут о тех двух функциях-то! ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 20.3.2009, 15:15
Сообщение #34


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(AD @ 20.3.2009, 15:12) *
SABROG, напиши, пожалуйста, тут о тех двух функциях-то! ;)

В Qt 4.5 если классы, которые используются для поддержки Open Document Format, среди них есть классы для работы с .zip архивами. В документации о них не слова и классы по сути только для внутреннего использования. Нас интересуют классы QZipReader и QZipWriter. Чтобы можно было их использовать надо:

- в .pro файле добавить это:
INCLUDEPATH += $(QTDIR)/src/gui/text

- в хедеры прописать пути:
#include <Qt/private/qzipreader_p.h>
#include <Qt/private/qzipwriter_p.h>
#include <qzip.cpp>


Использовать так:

//распаковка архивов
    QZipReader zip("file.zip"); // загружаем файл
    zip.extractAll("directory"); // извлекаем все что в нем в папку directory


С сжатием сложнее, но принцип такой:

    QZipWriter zip("file.zip"); // создаем файл
    zip.addDirectory("directory"); // добавляется пустая папка в zip архив с именем directory
    ....
//в созданную папку "directory" предыдущей командой мы добавляем файл file.ext.
//При этом мы сами должны открыть файл file.ext через QFile, прочитать все содержимое и передать как QByteArray в эту функцию
    zip.addFile("directory/file.ext", myByteArray);
    zip.close();


Сообщение отредактировал SABROG - 20.3.2009, 15:27
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 20.3.2009, 16:40
Сообщение #35


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


:) Да нет! Я про аналоги getenv!!!!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 20.3.2009, 17:11
Сообщение #36


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


В Qt есть недокументированные кроссплатформменные функции qgetenv() и qputenv() для получения и установки переменных окружения.

QByteArray qgetenv(const char *varName);
bool qputenv(const char *varName, const QByteArray& value);


Описаны в <QtCore/QtGlobal>

Использовать на свой страх и риск.

Сообщение отредактировал SABROG - 20.3.2009, 17:15
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 20.3.2009, 17:43
Сообщение #37


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(SABROG @ 20.3.2009, 20:11) *
В Qt есть недокументированные кроссплатформменные функции qgetenv() и qputenv()
любопытно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 20.3.2009, 22:06
Сообщение #38


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Прикрепленный файл  qconfig_myconfig.zip ( 826 байт ) Кол-во скачиваний: 512


Для тех кто помешан на обезжиривании Qt. Вместе с исходниками Qt для мобильных систем поставляется утилита QConfig, которая позволяет отключать возможности (features).



При этом утилита сама смотрит за зависимостями и отключает зависимые компоненты.
Дистрибутивы для win и *nix идут без этой утилиты. Поэтому, чтобы воспользоваться данной утилитой нам понадобится скачать общий дистрибутив Qt для всех платформ. Сделать это можно в .torrent репозитории http://dist.trolltech.com/torrents/ Качать надо это: http://dist.trolltech.com/torrents/qt-all-...5.0.zip.torrent

Сразу скажу, что у меня уже стояла Qt собранная статически, поэтому я просто зашел в папку $(QTDIR)/tools/qconfig и вбил заветные команды:
qmake
mingw32-make release


После этого я получил в папке release готовую утилиту. Я её залил сюда (3Mb): http://filebeam.com/b143c6b3d9bb05976e6ab1ea2fed7756

Далее запускаем её, не важно откуда. Появится диалог выбора файла. Надо выбрать файл $(QTDIR)/src/corelib/global/qfeatures.txt
Затем снимаем галки, которые нам не нужны и сохраняем в файл $(QTDIR)/src/corelib/global/qconfig-НАШЕИМЯ.h
Расположение и имя файла должно быть именно таким иначе он не найдется.

Затем используем не документированный для виндовых/линуксовых дистрибутивов, но существующий ключ -qconfig таким образом:
configure.exe -qconfig НАШЕИМЯ [тут идут остальные обычные параметры типа -confirm-license -static -no-exceptions и т.д.]


Дальше собираем как обычно. В аттаче я прикрепил свою конфигурацию, не уверен, что она оптимальная или правильная.

Проверил на примере /examples/widgets/calculator.
В обычном статике размер: 7,14 МБ (7 494 656 байт)
C теми же ключами но после редактирования через qconfig: 6,19 МБ (6 496 256 байт)
UPX сжал exe файл до : 2,34 МБ (2 463 232 байт)
Для сравнения обычная (shared) сборка, сумма всех файлов в папке: 13,1 МБ (13 779 036 байт)
---
Я пошел дальше в своих изысканиях и решил собрать Qt с оптимизацией по размеру. Отредактировал файл $QTDIR/mkspecs/win32-g++/qmake.conf и заменил строчку:
Цитата
QMAKE_CFLAGS_RELEASE = -O2

на
Цитата
QMAKE_CFLAGS_RELEASE = -Os

Проделал ту же операцию, что и раньше. Теперь пример calculator.exe сжатый UPX'ом весит: 1,99 МБ (2 095 104 байт)
Хоть и в ущерб скорости (оптимизация убрала выравнивание страниц), зато в пользу размера. Еще бы, есть разница 13Мб и 1,99Мб ;) ?

---
Немного погуглив нашел еще пару ключей для компилятора, которые прописал тоже в qmake.conf
Цитата
-fmerge-all-constants
-fno-default-inline
-fno-inline
-ffunction-sections
-fdata-sections
-Wl,--gc-sections

Новый рекорд: 1,86 МБ (1 951 744 байт)

Но есть побочный эффект. Простейшие примеры линкуются около минуты.


В общем экспериментируйте.

Сообщение отредактировал SABROG - 22.3.2009, 20:59
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 20.3.2009, 22:21
Сообщение #39


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


любопытно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 22.3.2009, 16:28
Сообщение #40


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(Litkevich Yuriy @ 20.3.2009, 22:21) *
любопытно

Обновил пост. Уже сам поражаюсь чего удалось добиться.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

10 страниц V  « < 2 3 4 5 6 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.5.2022, 2:50