Поиск:

Ответ в темуСоздание новой темы Создание опроса
> загрузка QPixmap из БД 
:(
    Опции темы
ecspertiza
Дата 1.4.2009, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 4
Всего: 5



Есть такая тема нужно создать компонент в котором будут создаваться Item в виде таблицы , в каждом Item-e должна быть картинка и внизу описание, проблема в том что картинку я загружаю в QPixmap размерность 5х4 то бишь 20 картинок, довольно токи долго грузятся вот как я подгружаю картинку

Код

QByteArray data = query.values(2).toByteArray();

QPixmap pxm;
pxm.loadFromData(data);

image->setPixmap(QPixmap(data.data())); // QLabel


может есть что то быстрее?

или уже есть готовый компонент вот фотка?

http://pic.ipicture.ru/uploads/090401/o5r5CD5Uc4.jpg

Это сообщение отредактировал(а) ecspertiza - 1.4.2009, 08:37


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
Elfebet
Дата 1.4.2009, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 5
Всего: 14



1. 3 и 4 строка у тебя лишние
2. Для быстроты картинки можно загружать в другом потоке
3. Так же загружать каждую картинку по мере необходимости

Добавлено через 5 минут и 45 секунд
а также использовать QPixmapCache
на счет компонента - для простоты я бы использовал QTableWidget


--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
ecspertiza
Дата 1.4.2009, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 4
Всего: 5



эээ извиняюсь с кодом напутал так как в первом посте написано картинки вообще не подгружаются

Код

QByteArray data = query.values(2).toByteArray();
QPixmap pxm;
pxm.loadFromData(data);

image->setPixmap(pxm);


вот так подгружаются но долго, а загружать в отдельном потоке не знаю навряд ли поможет так как суть такова есть таблица с каталогами у каждого каталога может быть несколько картинок( в идеале неограниченно), вот и отображение должно происходить так, юзверь в QComboBox выбрал каталог и в этот компонент под грузились  картинки размерностью выбранной юзверем, при этом если картинок больше чем позволяет размерность то должен появится ешё и выбор страниц, так что загрузка по мере необходимости уже тоже присутствует)))


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
just_geek
Дата 1.4.2009, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: 7
Всего: 10



гхм, может сам запрос не оптимизирован? Проверь просто выполнение запроса без загрузки в pixmap.
Покажи полностью код вместе запросом и загрузкой pixmap'a, а не этот кусок.
PM MAIL   Вверх
ecspertiza
Дата 1.4.2009, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 4
Всего: 5



процедура запроса и создания массива

Код

    QSqlQuery query;

    QString str = "select Object.id,Catalogue.name,Illustration.image from object,catalogue, "
                "illustration where object.catalogue_id = catalogue.id and "
                "illustration.object_id = object.id and illustration.\"DEFAULT\" = 1 ";

    str += " and Catalogue.name='"+catalogue->currentText()+"'";

    if (!query.exec(str))
    {
        qDebug() << "error execute query!!!";
        qDebug() << str;
    }

    int left = 0;
    int top = 0;

    int wid = (preview->width()-10) / _old_preview_option.horizontal;
    int hei = (preview->height()-10) / _old_preview_option.vertical;

    for (int i = 0;i<_old_preview_option.horizontal*_old_preview_option.vertical;i++)
    {
        query.seek(i,false);
        qDebug() << _old_preview_option.horizontal*_old_preview_option.vertical;
        qDebug() << i << query.value(0).toInt();
        if (left == _old_preview_option.horizontal)
        {
            top++;
            left = 0;
        }

        PreviewItem *item = new PreviewItem(preview,left*wid,top*hei,query.value(2).toByteArray(),
                                            createSostNumber(query.value(0).toInt()));
        item->show();

        left++;
    }


класс PreviewItem

Код

PreviewItem::PreviewItem(QWidget *parent,int x,int y,QByteArray data,QString _text)
:QWidget(parent)
{
    setGeometry(x,y,100,120);

    QVBoxLayout *verticalLayout = new QVBoxLayout(this);

    QPixmap pxm;
    pxm.loadFromData(data);

    image = new QLabel(this);
    image->setScaledContents(true);
    image->setPixmap(pxm);

    verticalLayout->addWidget(image);

    text = new QLabel(this);
    text->setMaximumSize(QSize(16777215, 20));
    text->setAlignment(Qt::AlignCenter);
    text->setText(_text);

    verticalLayout->addWidget(text);
}


вот как то так


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
just_geek
Дата 1.4.2009, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: 7
Всего: 10



Код

PreviewItem::PreviewItem(QWidget *parent,int x,int y,QByteArray data,QString _text)

Передача массива и строки по значению. Замени на ссылку или указатель.

Это сообщение отредактировал(а) just_geek - 1.4.2009, 09:58
PM MAIL   Вверх
Elfebet
Дата 1.4.2009, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 5
Всего: 14



в твоем случае идет копирование data, что есть лишнее, сделай так
Код

PreviewItem::PreviewItem(QWidget *parent,int x,int y, const QByteArray &data, const QString &_text)




--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
ecspertiza
Дата 1.4.2009, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 4
Всего: 5



Сделал особо не помогло, хотел ещё спросить размер картинок 70-250 кб это сильно много?

всё время жрёт вот этот кусок

Код

QPixmap pxm;
pxm.loadFromData(data);


Это сообщение отредактировал(а) ecspertiza - 1.4.2009, 11:01


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
just_geek
Дата 1.4.2009, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: 7
Всего: 10



Цитата

70-250 кб

Это общий размер, или каждой? В любом случае не очень много. У нас в проекте грузятся QImage, гораздо большего размера и в большем количестве. Да еще из пожатого zlib'ом архива. Правда отрисовывается все в QGLWidget smile Все проходит довольно быстро. Как узнал что затык именно в этом куске?

Убрал его и загрузка стала быстрее? Сборка дебаг или релиз?

Это сообщение отредактировал(а) just_geek - 1.4.2009, 11:46
PM MAIL   Вверх
ecspertiza
Дата 1.4.2009, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 4
Всего: 5



Цитата(just_geek @  1.4.2009,  11:44 Найти цитируемый пост)
Это общий размер, или каждой?


Размер каждой


Цитата(just_geek @  1.4.2009,  11:44 Найти цитируемый пост)
Убрал его и загрузка стала быстрее?


Почтиsmile оставил только этот кусок и скорость не изменилась


Цитата(just_geek @  1.4.2009,  11:44 Найти цитируемый пост)
Сборка дебаг или релиз?


релиз

Ещё такой вопрос как средствами  КуТе уменьшить размер(высота, ширина) изображения?
Думаю может в базе хранить превьюшки размером 200х300 пикселей, они весят килобайт по 10:)


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
just_geek
Дата 1.4.2009, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: 7
Всего: 10



Попробуй его убрать smile А остальное оставить, хотя что это даст...

Метод
Код

QPixmap QPixmap::scaled ( const QSize & size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation ) const

PM MAIL   Вверх
bsa
Дата 1.4.2009, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Цитата(just_geek @ 1.4.2009,  09:57)
Код

PreviewItem::PreviewItem(QWidget *parent,int x,int y,QByteArray data,QString _text)

Передача массива и строки по значению. Замени на ссылку или указатель.

В документации указано, что в QT все контейнеры имеют архитектуру COW (copy on write), т.е. по сути они сами представляют собой указатели с подсчетом ссылок. Поэтому не удивительно, что при замене на ссылку ничего не изменилось.  smile 
PM   Вверх
ecspertiza
Дата 1.4.2009, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 4
Всего: 5



Превьюшки немного помогли до превью загрузка на 20-ть картинок была 2.3 сек после 0.9))) 


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1105 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.