Russian Qt Forum
Май 04, 2024, 20:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 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.
587  Qt / Многопоточное программирование, процессы / Re: Поток для работы с диском : Май 18, 2013, 15:31
Тогда такие вопросы, как только класс закончил выполнять действия он останавливается, как только появились новые запросы класс запускается.
Через qtconcurrent это не лучше сделать?
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 не смущает.
Мне нужно чтение из файла с ресурсами, и создание файла ресурсов. Изменения ему не нужны.
591  Qt / Мультимедиа / Re: Хранение изображений в одном файле : Май 08, 2013, 10:01
Есть ли возможность для QResource программно засунуть картинки в файл с ресурсами?

Похоже буду делать сохранение ручками.
592  Qt / Мультимедиа / Хранение изображений в одном файле : Май 08, 2013, 07:50
Как наиболее правильно реализовать следующую задачу средствами Qt. Есть много картинок формата png, нужно их хранить в одном файле и загружать их в память для отображения. Формат файла хоть архив, хоть свой. Желательно, чтобы распаковка была обычным копированием в память, т.е. архивы типа "tar".
593  Qt / Мультимедиа / Re: QPixmapCache пропадает содержимое : Май 08, 2013, 07:35
Итого: В версии 4.8.4 и 4.8.1 под windows баг есть, в 4.7.4 нет.
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 выполнил недопустимую операцию.
595  Qt / Мультимедиа / Re: QPixmapCache пропадает содержимое : Май 07, 2013, 11:25
http://rghost.ru/45821907
Картинка первая попавшаяся.
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.html
Цитировать
The 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]

Страница сгенерирована за 0.074 секунд. Запросов: 23.