Полная версия этой страницы:
Запуск файлов один за другим
Всем привет. Существует следующая таблица.
Задача запускать файлы поочередно из таблицы и завершать их основываясь на их продолжительности.
Проблема не в qprocess, qtime, qtimer или qtreewidget. Я не могу понять как это организовать.
Цитата(frefik @ 30.5.2011, 17:28)
Всем привет. Существует следующая таблица.
Задача запускать файлы поочередно из таблицы и завершать их основываясь на их продолжительности.
Проблема не в qprocess, qtime, qtimer или qtreewidget. Я не могу понять как это организовать.
непонятно что за таблица QTableView или чего. Модель чего ? Базы или список сформированный ? А так, берем текущую позицию, считываем поля, запускаем отдельный поток на проигрывание. Когда он закончится и пеcне конец. Если нажать "СТОП" (вроде есть), то завершаем принудительно.
QTreeWidget. Можно подробнее, очень надо. Как считывать понятно. На счет потока не понятно, надо что бы сразу же после конца песни запускалась другая.
RazrFalcon
30.5.2011, 12:48
Проще всего: посмотреть чужие исходники. К примеру SMPlayer.
А вообще, берем все время трека, затем каждую секунду, к примеру, смотрим текущее положение (если это возможно), и сравниваем.
Также, можно написать сигнал, который будет реагировать на окончание трека. Вы вообще что используете для воспроизведения?
Дело в том что программа запускает файлы, с помощью программ которые ассоциированные с ними.
алгоритм следующий:
1.процесс запустить(имя программы, файл...)
2. отсчет времени(time.start())
3. проверка, если переменная time приравнивается продолжительности файла, то завершить и подать на обработку следующий файл.
Я впал в какую-то рекурсию, могу представить как проделать это с одним файлом, но как сделать поочередно с файлами.
Пожалуйста отпишитесь.
RazrFalcon
30.5.2011, 13:09
То есть Вы через QProcess стартуете?
Прога сама завершается или вы ее сами закрываете? Так как можно было просто поставить waitForFinished(), который, к слову, поддерживает задание времени. Так что можно и от сюда плясать.
Так же можно сделать kill() процессу, через нужное время. Но это убивает прокрутку и паузы.
Да.
Можете привести пример пожалуйста.
Грубо говоря задача следующая:
файл video1.avi, продолжительность 10 минут
файл video2.avi, продолжительность 5 минут
файл video3.avi, продолжительность 34 минут
Задача поочередно файлы, проиграть программой по-умолчанию.
Не просто запустить, а запустить первый подождать(как?) 10 минут, завершить первый, запустить второй и.т.д.
Мне бы пример.
Как бы вы её реализовали?
RazrFalcon
30.5.2011, 13:47
QProcess video;
// movieCount - количество фильмов, ну или tableWidget->rowCount(); или в чем вы там выводите.
for (int i=0; i<movieCount; ++i) {
// нужна прога, которая берет файлы из аргументов. В консоли kmplayer movie.avi. Как то так;
video.start("тут пишем путь к программе", QStringList("тут путь к файлу"));
video.waitForFinished(); // если сама завершится.
video.waitForFinished(10000000000); // если нужно ждать, в msecs
//video.close(); //если само не завершится.
}
Litkevich Yuriy
30.5.2011, 18:30
RazrFalcon, а события GUI (например, таскание окошка) когда обрабатывать будешь?
RazrFalcon
30.5.2011, 18:35
Можно во втором потоке запускать.
И да, я просто предложил.
Все равно ТС нужно запускать приложения, а как это сделать без QProcess я не знаю.
Litkevich Yuriy
30.5.2011, 18:48
просто QProcess может сам работу работать, нужно толко к его сигналам подключтся, вместо того, чтобы зациклившись ждать, когда он закончит.
RazrFalcon
30.5.2011, 18:57
Как?
Litkevich Yuriy
30.5.2011, 20:06
читать асистент
RazrFalconСпасибо за помощь
Задачу решил с помощью второго потока и функции sleep()
.
Кидаю с помощью сигнала QList<QTreeWidgetItem *> list(итемы таблицы) и далее в функции работаю сними, тупо вызываю sleep(), продолжительностью равную длительности файла.
Решение нормальное или тут что-то дико?
RazrFalcon
31.5.2011, 13:55
Ну если пауза/перемотка не нужна - то норм.
Как по мне, лучше всего настроить в запускаемом плеере автозавершение по окончании воспроизведения. А в вашей проге просто ждать, ака waitForFinished(). ИМХО.
Без привязки к конкретному плееру и там еще не только видео файлы, вообщем sleep(), самое то.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.