Всем привет. Существует следующая таблица.
Задача запускать файлы поочередно из таблицы и завершать их основываясь на их продолжительности.
Проблема не в qprocess, qtime, qtimer или qtreewidget. Я не могу понять как это организовать.
QTreeWidget. Можно подробнее, очень надо. Как считывать понятно. На счет потока не понятно, надо что бы сразу же после конца песни запускалась другая.
Проще всего: посмотреть чужие исходники. К примеру SMPlayer.
А вообще, берем все время трека, затем каждую секунду, к примеру, смотрим текущее положение (если это возможно), и сравниваем.
Также, можно написать сигнал, который будет реагировать на окончание трека. Вы вообще что используете для воспроизведения?
Дело в том что программа запускает файлы, с помощью программ которые ассоциированные с ними.
алгоритм следующий:
1.процесс запустить(имя программы, файл...)
2. отсчет времени(time.start())
3. проверка, если переменная time приравнивается продолжительности файла, то завершить и подать на обработку следующий файл.
Я впал в какую-то рекурсию, могу представить как проделать это с одним файлом, но как сделать поочередно с файлами.
Пожалуйста отпишитесь.
То есть Вы через QProcess стартуете?
Прога сама завершается или вы ее сами закрываете? Так как можно было просто поставить waitForFinished(), который, к слову, поддерживает задание времени. Так что можно и от сюда плясать.
Так же можно сделать kill() процессу, через нужное время. Но это убивает прокрутку и паузы.
Да.
Можете привести пример пожалуйста.
Грубо говоря задача следующая:
файл video1.avi, продолжительность 10 минут
файл video2.avi, продолжительность 5 минут
файл video3.avi, продолжительность 34 минут
Задача поочередно файлы, проиграть программой по-умолчанию.
Не просто запустить, а запустить первый подождать(как?) 10 минут, завершить первый, запустить второй и.т.д.
Мне бы пример.
Как бы вы её реализовали?
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(); //если само не завершится.
}
RazrFalcon, а события GUI (например, таскание окошка) когда обрабатывать будешь?
Можно во втором потоке запускать.
И да, я просто предложил.
Все равно ТС нужно запускать приложения, а как это сделать без QProcess я не знаю.
просто QProcess может сам работу работать, нужно толко к его сигналам подключтся, вместо того, чтобы зациклившись ждать, когда он закончит.
Как?
читать асистент
RazrFalcon
Спасибо за помощь
Задачу решил с помощью второго потока и функции sleep() .
Кидаю с помощью сигнала QList<QTreeWidgetItem *> list(итемы таблицы) и далее в функции работаю сними, тупо вызываю sleep(), продолжительностью равную длительности файла.
Решение нормальное или тут что-то дико?
Ну если пауза/перемотка не нужна - то норм.
Как по мне, лучше всего настроить в запускаемом плеере автозавершение по окончании воспроизведения. А в вашей проге просто ждать, ака waitForFinished(). ИМХО.
Без привязки к конкретному плееру и там еще не только видео файлы, вообщем sleep(), самое то.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)