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

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: передать рисунок из файла через QDataStream в QImage  (Прочитано 6853 раз)
mokynis
Самовар
**
Offline Offline

Сообщений: 176


Просмотр профиля
« : Июль 01, 2010, 13:48 »

задача: считать содержимое выбранного файла рисунка и вывести рисунок в QLabel
Код:
QImage img;
    QFile ifile;
    QString str=ui->lineEdit->text();
    if(!str.isEmpty())
    {
        ifile.setFileName(str);
        if(!ifile.open(QIODevice::ReadOnly))
        {
            QMessageBox::warning(this,tr("Klaida"),tr("Can't open file"));
            return;
        }
        //img.load(str);
        QDataStream stream(&ifile);
        stream.setVersion(QDataStream::Qt_4_3);
        stream>>img;
        if(stream.status()!=QDataStream::Ok)
        {
            QMessageBox::warning(this,tr("Klaida"),tr("Can't draw file context"));
            return;
        }
//-------- для отладки-проверка открытия файла       
        if(img.isNull())
        {
            QMessageBox::warning(this,tr("Klaida"),tr("Can't move file context"));
            return;
        }
//-----------
        ui->label->setPixmap(QPixmap::fromImage(img));

        ifile.close();
    }
если без Stream'а просто загружаю рисунок из файла (img.load(str)Подмигивающий-все работает. Если через поток-выдает, что
Цитировать
Image is a null image
. Как же использовать QDataStream? (QTextStream использовать получается)
Записан

QT4, Qt5, Qt6 Debian, ArchLinux
shirushizo
Гость
« Ответ #1 : Июль 01, 2010, 18:00 »

У QImage или QPixmap есть метод loadFormData() потыкай его.
Записан
mokynis
Самовар
**
Offline Offline

Сообщений: 176


Просмотр профиля
« Ответ #2 : Июль 01, 2010, 18:28 »

спасибо, попробую. Но у Шлее имеется пример чтения данных с помощью QDataStream. Я его и хотел проверить. Не получилось что-то. Тут дело не просто в том, чтобы загрузить рисунок из файла, а именно через поток.
Записан

QT4, Qt5, Qt6 Debian, ArchLinux
p166
Гость
« Ответ #3 : Июль 01, 2010, 18:32 »

Можно сгенерировать QImage в потоке, а на отрисовку в GUI передать только указатель. Имхо так проще.
Записан
BRE
Гость
« Ответ #4 : Июль 01, 2010, 18:33 »

спасибо, попробую. Но у Шлее имеется пример чтения данных с помощью QDataStream. Я его и хотел проверить. Не получилось что-то. Тут дело не просто в том, чтобы загрузить рисунок из файла, а именно через поток.
Что бы прочитать данные (в том числе QImage) из файла с помощью QDataStream, нужно сначала записать эти данные в файл используя все тот-же QDataStream.
Записан
mokynis
Самовар
**
Offline Offline

Сообщений: 176


Просмотр профиля
« Ответ #5 : Июль 01, 2010, 18:37 »

еще один косяк обнаружился. Пусть рисунок загрузился через img.load(), вообще без упоминания о QDataStream. Если я хочу открыть другой рисунок и запускаю QFileDialog::getOpenFileName(), программа грузит процессор на 100% и все виснет. Это-то еще почему?
Записан

QT4, Qt5, Qt6 Debian, ArchLinux
mokynis
Самовар
**
Offline Offline

Сообщений: 176


Просмотр профиля
« Ответ #6 : Июль 02, 2010, 05:42 »

все еще хуже. Процессор грузится на 98-100% уже после первой загрузки. Проблема уже совсем не по теме, но не начинать же новую тему с теми же исходными данными?
Записан

QT4, Qt5, Qt6 Debian, ArchLinux
BaltikS
Гость
« Ответ #7 : Июль 02, 2010, 05:53 »

Что то из разряда фантастики.... Код нужно глянуть....
Записан
mokynis
Самовар
**
Offline Offline

Сообщений: 176


Просмотр профиля
« Ответ #8 : Июль 02, 2010, 06:20 »

с загруженным процессором разобрался-забыл в paintEvent() вставить условие перерисовки-он, похоже постоянно его рисовал, что бы я не делал. С потоком, если
Цитировать
Что бы прочитать данные (в том числе QImage) из файла с помощью QDataStream, нужно сначала записать эти данные в файл используя все тот-же QDataStream.
, а просто считать в поток из абы какого файла нельзя, то тоже все понятно. Жаль, что Шлее про это не написал. Тему не пришлось бы создавать...
Записан

QT4, Qt5, Qt6 Debian, ArchLinux
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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