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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Извлечение ресурса из qrc в QTemporaryFile  (Прочитано 21521 раз)
Hellrider
Гость
« : Декабрь 27, 2012, 14:06 »

Можно ли реализовать во время исполнения приложения, извлечение файла из ресурсов qrc? Есть wav файл, который из ресурсов по средством QSound не проигрывается, но таскать вместе
с приложением звуковой файл не вариант.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Декабрь 27, 2012, 14:07 »

Как пытаешься проиграть?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Hellrider
Гость
« Ответ #2 : Декабрь 27, 2012, 14:12 »

Код:
QSound::play("://ir_inter.wav");
Записан
Bepec
Гость
« Ответ #3 : Декабрь 27, 2012, 14:15 »

QSound не проигрывает файл из ресурсов. Уже куча тем была.
Да, можно реализовать.
Копировать вроде можно.
И проигрывать уже из темповой папки.
Записан
Hellrider
Гость
« Ответ #4 : Декабрь 27, 2012, 14:18 »

QSound не проигрывает файл из ресурсов. Уже куча тем была.
Да, можно реализовать.
Копировать вроде можно.
И проигрывать уже из темповой папки.

Хотелось бы узнать, как именно это реализовать.  Строит глазки
Записан
Bepec
Гость
« Ответ #5 : Декабрь 27, 2012, 14:24 »

Могу ошибаться насчёт копирования.
псевдокод
Код:
QString temp; // не помню синтаксиса, но получаем темповую папку
QFile file("://resource/temp.wav");
if (file.copy(temp + "in_inter.wav"))
{
   qDebug() << "true";
   QSound::play(temp + "in_inter.wav");
}
else
   qDebug() << QString("error copy sound. Path %1!").arg(temp + "in_inter.wav");
Записан
Hellrider
Гость
« Ответ #6 : Декабрь 27, 2012, 14:42 »

Могу ошибаться насчёт копирования.
псевдокод
Код:
QString temp; // не помню синтаксиса, но получаем темповую папку
QFile file("://resource/temp.wav");
if (file.copy(temp + "in_inter.wav"))
{
   qDebug() << "true";
   QSound::play(temp + "in_inter.wav");
}
else
   qDebug() << QString("error copy sound. Path %1!").arg(temp + "in_inter.wav");

Спасибо! Все оказалось очень просто.

Код:
QFile file("://ir_inter.wav");
    QTemporaryFile ptemp;
    if(ptemp.open()){
        if(file.copy(ptemp.fileName() + "ir_inter.wav")){
            QSound::play(ptemp.fileName() + "ir_inter.wav");
        }
    }
    file.close();
    ptemp.close();
Записан
Bepec
Гость
« Ответ #7 : Декабрь 27, 2012, 15:03 »

Кхм. Вы попробуйте так с каким нить файлом где то в полминуты длиной сделать.

Не полетит в тартарары из-за закрытия QTemporalityFiles?

Проще выражаясь - когда удалится ptemp, QSound будет продолжать его проигрывать. Криков не будет?

Записан
Hellrider
Гость
« Ответ #8 : Декабрь 27, 2012, 15:10 »

Кхм. Вы попробуйте так с каким нить файлом где то в полминуты длиной сделать.

Не полетит в тартарары из-за закрытия QTemporalityFiles?

Проще выражаясь - когда удалится ptemp, QSound будет продолжать его проигрывать. Криков не будет?


Если не ошибаюсь то после закрытия ptemp, временный файл уничтожается. В моём случае имеется маленький звуковой файл, для оповещения. Сама реализация находится в слоте.
Можно конечно сделать уничтожение темпа при закрытии приложения.
Ну с файлами большого размера, такой финт конечно не прокатит я думаю, копирование будет создавать задержку или я ошибаюсь?
« Последнее редактирование: Декабрь 27, 2012, 15:16 от Hellrider » Записан
Bepec
Гость
« Ответ #9 : Декабрь 27, 2012, 15:25 »

Ну до мегабайта копирование ничего не будет создавать.
А вот попортиться звук может Улыбающийся Вы лучше попробуйте и отпишите Улыбающийся

PS по идее темповый файл должен умирать, но возможно он останется. И будет лежать там даже после закрытия программы. Так можно и винт захламить Веселый
Записан
Hellrider
Гость
« Ответ #10 : Декабрь 27, 2012, 15:40 »

Ну до мегабайта копирование ничего не будет создавать.
А вот попортиться звук может Улыбающийся Вы лучше попробуйте и отпишите Улыбающийся

PS по идее темповый файл должен умирать, но возможно он останется. И будет лежать там даже после закрытия программы. Так можно и винт захламить Веселый


Вставил 4мб мп3 файл (wav файлов больших не нашлось). Как оказалось темповые файлы не удаляются и складируются. Файл скопировался в темп, естественно QSound мп3 не поддерживает.
Запустил скопированный мп3 из темпа, ничего не попорчено, даже теги сохранены.
-----------------
Не могу понять, как удалить темп файл, у QTemporaryFile remove() нету, файл должен удаляться с закрытием темпа. Пробовал ставить setAutoRemove(true) - все равно не удаляется.
« Последнее редактирование: Декабрь 27, 2012, 16:47 от Hellrider » Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #11 : Декабрь 27, 2012, 16:55 »

Цитировать
Не могу понять, как удалить темп файл, у QTemporaryFile remove() нету,
Зато у QFile есть Подмигивающий

Надо наверно сначала закрыть QTemporaryFile, а потом удалить через QFile.
Записан

ArchLinux x86_64 / Win10 64 bit
Hellrider
Гость
« Ответ #12 : Декабрь 27, 2012, 17:42 »

Цитировать
Не могу понять, как удалить темп файл, у QTemporaryFile remove() нету,
Зато у QFile есть Подмигивающий

Надо наверно сначала закрыть QTemporaryFile, а потом удалить через QFile.

Не получается. Что не так?
Код:
QFile file("://ir_inter.wav");
    QTemporaryFile ptemp;
    if(ptemp.open()){
        if(file.copy(ptemp.fileName() + ".wav")){

             QSound::play(ptemp.fileName() + ".wav");

                    }
    }
     QString str = ptemp.fileName();
    str += ".wav";
    file.close();
    ptemp.close();
    QFile::remove(str);
Записан
Bepec
Гость
« Ответ #13 : Декабрь 27, 2012, 17:51 »

А разве filename возвращает полный путь? Хотя мб мб
Записан
Hellrider
Гость
« Ответ #14 : Декабрь 27, 2012, 17:57 »

А разве filename возвращает полный путь? Хотя мб мб

дебаг выводит абсолютный путь. Не пойму в чем проблема кроется.

Вычитал, что при копировании из ресурсов, файлу ставится флаг read only. Как можно изменить атрибуты у файла?
« Последнее редактирование: Декабрь 27, 2012, 18:20 от Hellrider » Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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