crossplatform.ru

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

igor_bogomolov
  опции профиля:
сообщение 13.1.2011, 17:40
Сообщение #1


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

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

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




Репутация:   29  


Написал небольшую заметку в wiki по работе с zip архивами в Qt.

Цитата
В Qt есть не документированные классы для работы с zip архивами. Эти классы позволяют распаковывать уже существующие архивы по заданному пути, так и создавать новые архивы. Для создания используется класс QZipWriter, для распаковки QZipReader. Реализация этих классов находятся по следующему пути qt/src/gui/text в файлах qzipreader_p.h, qzipwriter_p.h и qzip.cpp.


Продолжение Link...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
2 страниц V   1 2 >  
Начать новую тему
Ответов (1 - 18)
Алексей1153
  опции профиля:
сообщение 13.1.2011, 20:06
Сообщение #2


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

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


круто ) Одним головняком меньше, если что))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 13.1.2011, 22:57
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

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




Репутация:   5  


А они разве есть в Qt 4.7 ? Давно сий финт юзаю, помнится даже в 4.6.х какой-то уже не было.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 13.1.2011, 23:07
Сообщение #4


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

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


ufna, я глянул щас - есть. У меня Qt 4.7.0
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 13.1.2011, 23:31
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

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




Репутация:   5  


Видимо в какой-то из промежуточных косяк был, я из-за этого отказался от использования.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 14.1.2011, 8:40
Сообщение #6


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

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

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




Репутация:   29  


Цитата(ufna @ 13.1.2011, 22:57) Link
А они разве есть в Qt 4.7 ? Давно сий финт юзаю, помнится даже в 4.6.х какой-то уже не было.
Эти классы появились с версии Qt4.5. Используются для поддержки ODF формата, Так что пропасть эти классы не могли и не могут :)
Тем более я предлагаю не подключать эти файлы как есть (под Linux это и не получится), а заимствовать их в свой проект.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 19.1.2011, 9:27
Сообщение #7


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

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




Репутация:   7  


А как нужно правильно заинклудить хидеры qzipreader_p.h и qzipwriter_p.h?

Если писать так
#include qzipreader_p.h
#include qzipwriter_p.h

то QtCreator их не видит... А вот так:
#include "/home/evgeny/qtsdk-2010.05/qt/include/QtGui/private/qzipreader_p.h"
#include "/home/evgeny/qtsdk-2010.05/qt/include/QtGui/private/qzipwriter_p.h"

недолговечно...

------------
UPD
Все, понятно. Включать их вообще безсмысленно (таким образом).

------------
UPD

Включил 3 zip-файла в проект, но gcc ругается что не может найти zlib. Сам файл находится тут. qt/src/3rdparty/zlib. cmake я не использую. В проекте пытаюсь указать директорий включения так:
INCLUDEPATH += . \
......
$${QTDIR}/src/3rdparty/zlib

QTDIR в переменных среды сборки в Qt Creator указана как /home/evgeny/qtsdk-2010.05/qt. Результат - все равно не видит zlib.h. А если задать полный путь, то все ок. Как это можно побороть? Т.е. я так понимаю QTDIR не разворачивается чтоли?(

Сообщение отредактировал Rocky - 19.1.2011, 10:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.1.2011, 10:53
Сообщение #8


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

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

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




Репутация:   94  


Цитата(Rocky @ 19.1.2011, 11:27) Link
Если писать так
а как ты свои заголовочники подключаешь?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 19.1.2011, 10:58
Сообщение #9


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

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




Репутация:   7  


Чисто свои по относительному пути:
#include "./MainWindow.h"
#include "./ErrorEnum.h"


Qt
#include <QDate>
#include <QFile>
#include <QLibrary>
#include <QDebug>


А эти, zip, я создал директорий Zip, добавил туда 3 файла, qzipreader_p.h, qzipwriter_p.h, qzip.cpp и подключаю так:
#include "../Zip/qzipreader_p.h"
#include "../Zip/qzipwriter_p.h"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 19.1.2011, 11:15
Сообщение #10


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

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

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




Репутация:   29  


Rocky, попробуй так
INCLUDEPATH += $$[QT_INSTALL_PREFIX]/src/3rdparty/zlib
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 19.1.2011, 11:37
Сообщение #11


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

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




Репутация:   7  


Да, спасибо, помогло ))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Winand
  опции профиля:
сообщение 19.2.2012, 13:43
Сообщение #12


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 19.2.2012
Пользователь №: 3226

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




Репутация:   0  


В qt 4.8 qzip.cpp:420
const quint32 mode = (qFromLittleEndian<quint32>(&header.h.external_file_attributes[0]) >> 16) & 0xFFFF;

mode получается равен нулю, хотя external_file_attributes[0]=32 для файлов, 16 для директорий. В итоге файлы не определяются файлами и не распаковываются. Дальше я пока не разобрался
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 19.2.2012, 18:34
Сообщение #13


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

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


Winand, 3210==1000002 , поэтому неудивительно, что при сдвиге этого числа на 16 битов вправо получается 0

но дело вообще не в этом. А вот в этом:

const quint32 mode = (qFromLittleEndian<quint32>(&header.h.external_file_attributes[0]) >> 16) & 0xFFFF;

зачем берётся адрес
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Ov3r1oad
  опции профиля:
сообщение 29.2.2012, 13:17
Сообщение #14


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 21.12.2011
Пользователь №: 3085

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




Репутация:   0  


Вот использую кусок кода в точности такой же как в статье, но почему в архиве создаются (помимо самих файлов и папок) файлы размером 0 bytes с именем папок. Никто не знает, в чем причина?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Бублик_*
сообщение 20.11.2012, 15:14
Сообщение #15





Гости








    


А ни у кого не было проблемы при использования QZipReader?

./debug\XXXX.o:C:\projects\XXXX.cpp:410: undefined reference to `_imp___ZN10QZipReaderC1EP9QIODevice'
./debug\XXXX.o:C:\projects\XXXX.cpp:411: undefined reference to `_imp___ZNK10QZipReader8fileDataERK7QString'
./debug\XXXX.o:C:\projects\XXXX.cpp:424: undefined reference to `_imp___ZN10QZipReaderD1Ev'
./debug\XXXX.o:C:\projects\XXXX.cpp:424: undefined reference to `_imp___ZN10QZipReaderD1Ev'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\Exchange.exe] Error 1
mingw32-make: *** [debug] Error 2
15:55:20: The process "C:\projects\qtsdk\mingw\bin\mingw32-make.exe" exited with code 2.


В чем может быть беда?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 20.11.2012, 17:30
Сообщение #16


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

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


файлы в проект не подключены
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Бублик_*
сообщение 20.11.2012, 17:42
Сообщение #17





Гости








    


Цитата(Алексей1153 @ 20.11.2012, 17:30) Link
файлы в проект не подключены


Подключены.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 21.11.2012, 7:59
Сообщение #18


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

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


поищи в тырнете по строке ": undefined reference to `_imp___ZN10QZipReaderC1EP9QIODevice'"

к примеру, тут вот советуют

Link

QT += qt3support


Сообщение отредактировал Алексей1153 - 21.11.2012, 7:59
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Flatus_*
сообщение 5.5.2017, 12:05
Сообщение #19





Гости








    


Цитата(Бублик @ 20.11.2012, 15:14) Link
А ни у кого не было проблемы при использования QZipReader?

./debug\XXXX.o:C:\projects\XXXX.cpp:410: undefined reference to `_imp___ZN10QZipReaderC1EP9QIODevice'
./debug\XXXX.o:C:\projects\XXXX.cpp:411: undefined reference to `_imp___ZNK10QZipReader8fileDataERK7QString'
./debug\XXXX.o:C:\projects\XXXX.cpp:424: undefined reference to `_imp___ZN10QZipReaderD1Ev'
./debug\XXXX.o:C:\projects\XXXX.cpp:424: undefined reference to `_imp___ZN10QZipReaderD1Ev'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\Exchange.exe] Error 1
mingw32-make: *** [debug] Error 2
15:55:20: The process "C:\projects\qtsdk\mingw\bin\mingw32-make.exe" exited with code 2.


В чем может быть беда?

В файле *.pro :
QT += gui-private

В исходнике подклчать заголовочные файлы как:
#include <QtGui/private/qzipwriter_p.h>
#include <QtGui/private/qzipreader_p.h>
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 15.8.2025, 4:57