Просмотр сообщений
|
Страниц: 1 ... 38 39 [40]
|
586
|
Qt / Многопоточное программирование, процессы / Re: Поток для работы с диском
|
: Май 18, 2013, 16:01
|
Может есть готовый пример? Задача общая для потоков. Наследование от QThreat в моем случае не красиво. http://habrahabr.ru/post/150274/«Класс QThread создан и предназначен для использования в качестве интерфейса к потокам операционной системы, но не для того, чтобы помещать в него код, предназначенный для выполнения в отдельном потоке. В ООП мы наследуем класс для того чтобы расширить или углубить функциональность базового класса. Единственное оправдание для наследования QThread, которое я могу представить, это добавление такой функциональности, которой в QThread не существует, например, передача указателя на область памяти, которую поток может использовать для своего стека, или, возможно, добавление поддержки интерфейсов реального времени. Загрузка файлов, работа с базами данных, и подобные функции не должны присутствовать в наследуемых классах QThread; они должны реализовываться в других объектах» Для меня красивое решение - это класс A c методом Get(int a, int *b); Я вызываю сколько угодно раз этот очень медленный метод, как только он просчитает значение в другом потоке оно появится в переменной b.
|
|
|
588
|
Qt / Многопоточное программирование, процессы / Поток для работы с диском
|
: Май 18, 2013, 15:05
|
Как наиболее правильно и просто реализовать класс для работы с диском в другом потоке(чтение и сохранение файлов). Когда программа посылает запрос на чтение она продолжает выполняться, и как только файл будет загружен в память она получит указатель на него. Файлов может быть много и они могут долго загружаться, в это время программа будет постоянно обновлять сцену на opengl.
У класса должен быть список задач, для того чтобы прервать все или некоторые задачи, когда класс неипользуется поток не должен нагружать ядро процессора.
|
|
|
589
|
Qt / Мультимедиа / Re: QPixmapCache пропадает содержимое
|
: Май 17, 2013, 10:38
|
В версии 4.7.4 баг все же присутствует, хоть helloworld вроде и работает, но на моем ПО видно мерцание картинки раз в полминуты(картинки загружаются параллельно и когда кэш ее теряет она пропадает).
Если есть возможность проверьте под OS Windows версия Qt 4.8.1 или 4.8.4. Может у меня в системе что то неправильно стоит или луна не в той фазе чтобы QPixmap работал.
|
|
|
590
|
Qt / Мультимедиа / Re: Хранение изображений в одном файле
|
: Май 16, 2013, 09:34
|
Никто не мешает задействовать RCCResourceLibrary в rcc.cpp. Бонусы очевидны.
А можно привести пример или описание как это сделать? вам в рантайме нужно картинки в файл добавлять? как вариант, можете хранить BLOB в SQLite БД, если зависимость от QtSql не смущает.
Мне нужно чтение из файла с ресурсами, и создание файла ресурсов. Изменения ему не нужны.
|
|
|
592
|
Qt / Мультимедиа / Хранение изображений в одном файле
|
: Май 08, 2013, 07:50
|
Как наиболее правильно реализовать следующую задачу средствами Qt. Есть много картинок формата png, нужно их хранить в одном файле и загружать их в память для отображения. Формат файла хоть архив, хоть свой. Желательно, чтобы распаковка была обычным копированием в память, т.е. архивы типа "tar".
|
|
|
594
|
Qt / Мультимедиа / Re: QPixmapCache пропадает содержимое
|
: Май 07, 2013, 11:50
|
Итого: в версии 4.8.1 под windows есть мифический баг, в результате которого qpixmapcache начинает сам очищать себя.
Под линуксом еще не проверял(тоже qt 4.8.4 стоит в системе), но вот если поставить профиль Qt 4.7.4 for Desktop - mingw4.4. То программа работает, за пару минут ничего не теряет(запущу прогу на обед и посмотрю не потеряет ли кеш за пол часа).
offtop: Под какой сборкой qt лучше собирать проект чтобы поменьше сюрпризов ловить(на 5-ку пока не хочу переходить)? У меня версия 4.8.4 и криатор 2.7.0 при запуске в режиме отладки всплывает окно о том что gdb выполнил недопустимую операцию.
|
|
|
596
|
Qt / Мультимедиа / Re: QPixmapCache пропадает содержимое
|
: Май 07, 2013, 11:01
|
>>1. Написано же, этот статический метод оставлен только для старого кода и нельзя его юзать. Я так и понял. Придется удалить класс, ибо мне такой функционал не нужен. Тем не менее все же хочется понять что это баг или фича? >>2. А стектрейс куда показывает при падении? Извиняюсь за вывод консоли, но неожиданное завершение программы вызвано нажатием на красный квадратик(завершение выполнения). К багу/фиче отношения не имеет. >>3. У тебя кэшлимит меньше изображения. QPixmapCache::setCacheLimit(20*1024); 20 метров для картинки в 334 килобайта? даже в несжатом виде с альфаканалом она весит 2000*1000*4бита = ~8метров. но все же, поставил кеш на 50 метров: Запускается D:\WORK\learn\debug\learn.exe... QTime("11:59:14") QSize(2000, 1000) QTime("12:00:15") QSize(2000, 1000) QTime("12:00:55") QSize(2000, 1000) QTime("12:01:35") QSize(2000, 1000) p.s. Мне кажется этот класс был бы удобным в такой реализации: QPixmap pix = QPixmapCache::open("./1.jpg"); - соответственно если файл уже загружен, то загрузить из кэша.
|
|
|
597
|
Qt / Мультимедиа / Re: QPixmapCache пропадает содержимое
|
: Май 07, 2013, 10:33
|
На твою сигнатуру не похоже. http://harmattan-dev.nokia.com/docs/library/html/qt4/qpixmapcache-obsolete.htmlThe following class members are obsolete. They are provided to keep old source code working. We strongly advise against using them in new code. Static Public Members bool find ( const QString & key, QPixmap & pixmap ) (obsolete) QPixmap * find ( const QString & key ) (obsolete) Метод "bool find ( const Key & key, QPixmap * pixmap )" меня не устраивает тем что ему нужно еще и объект создать в который он скопирует из кеша изображение. С другой стороны я не смогу попортить изображения в кеше, но я особо и не собирался. для теста я все же переделал слот timer void timer() { // qDebug()<<QTime::currentTime()<<"zzz"; QPixmap pm; if(!QPixmapCache::find("1",&pm)) { QPixmapCache::insert("1",QPixmap("1.jpg"));
QPixmapCache::find("1",&pm); qDebug()<<QTime::currentTime()<<pm.size(); } результат: Запускается D:\WORK\learn\debug\learn.exe... QTime("11:31:58") QSize(2000, 1000) QTime("11:32:58") QSize(2000, 1000) Программа неожиданно завершилась. D:\WORK\learn\debug\learn.exe завершился с кодом 62097
|
|
|
598
|
Qt / Мультимедиа / Re: QPixmapCache пропадает содержимое
|
: Май 07, 2013, 10:00
|
Qt Creator 2.4.1 (Основан на Qt 4.7.4 (32-х битной)). Qt 4.8.1 ставился из qt_sdk_1_2_1 под виндовс 7. Это содержимое консоли: Запускается D:\WORK\learn\debug\learn.exe... QTime("10:55:15") QSize(2000, 1000) QTime("10:56:15") QSize(2000, 1000) QTime("10:56:55") QSize(2000, 1000) QTime("10:57:35") QSize(2000, 1000) QTime("10:58:16") QSize(2000, 1000) файл zzz.cpp #include "zzz.h"
ZZZ::ZZZ() { } p.s. если у него хитрая система самоочистки для обновления, то почему из n файлов он постоянно стирает только первый.
|
|
|
599
|
Qt / Мультимедиа / Re: QPixmapCache пропадает содержимое
|
: Май 07, 2013, 09:50
|
Написал Helloworld, запустил и все красиво работает, однако когда прервал процесс в консоли появилось следующее: QTime("10:41:11") QSize(2000, 1000) QTime("10:42:11") QSize(2000, 1000) QTime("10:42:51") QSize(2000, 1000) QTime("10:43:31") QSize(2000, 1000) QTime("10:44:11") QSize(2000, 1000) QTime("10:44:51") QSize(2000, 1000) QTime("10:45:31") QSize(2000, 1000) QTime("10:46:11") QSize(2000, 1000) Программа неожиданно завершилась. D:\WORK\learn\debug\learn.exe завершился с кодом 62097 main.cpp:#include <QApplication> #include <QPixmapCache> #include "zzz.h"
int main(int argc, char *argv[]) { QApplication app(argc, argv);
QPixmapCache::setCacheLimit(20*1024); QTimer *t = new QTimer; t->start(10); ZZZ *a = new ZZZ; QObject::connect(t,SIGNAL(timeout()),a,SLOT(timer()));
return app.exec(); }
zzz.h#ifndef ZZZ_H #define ZZZ_H
#include <QtGui>
class ZZZ: public QObject { Q_OBJECT public: ZZZ(); public slots: void timer() { QPixmap *pm = QPixmapCache::find("1"); if(!pm) { QPixmapCache::insert("1",QPixmap("1.jpg")); qDebug()<<QTime::currentTime()<<QPixmapCache::find("1")->size(); } } };
#endif // ZZZ_H
|
|
|
600
|
Qt / Мультимедиа / QPixmapCache пропадает содержимое
|
: Май 07, 2013, 08:17
|
Установил предел кэша в 20Мб. На экран вывожу картинку состоящую из фрагментов 50 раз в секунду, фрагменты читаю из кэша(find), если его нет в кеше вывожу пустую картинку затем медленно читаю с диска и загружаю в кэш. Ровно через каждые 30 секунд первое изображение пропадает и заново загружается с диска. Можно ли отучить QPixmapCache терять содержимое? Если нельзя, то посоветуйте наиболее красивый способ, для реализации хранилища картинок при переполнении которого удаляются первые занесенные в него элементы.
|
|
|
Страниц: 1 ... 38 39 [40]
|
|
|