Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Запуск файлов один за другим
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
frefik
Всем привет. Существует следующая таблица.



Задача запускать файлы поочередно из таблицы и завершать их основываясь на их продолжительности.
Проблема не в qprocess, qtime, qtimer или qtreewidget. Я не могу понять как это организовать.
maint
Цитата(frefik @ 30.5.2011, 17:28) *
Всем привет. Существует следующая таблица.
Задача запускать файлы поочередно из таблицы и завершать их основываясь на их продолжительности.
Проблема не в qprocess, qtime, qtimer или qtreewidget. Я не могу понять как это организовать.

непонятно что за таблица QTableView или чего. Модель чего ? Базы или список сформированный ? А так, берем текущую позицию, считываем поля, запускаем отдельный поток на проигрывание. Когда он закончится и пеcне конец. Если нажать "СТОП" (вроде есть), то завершаем принудительно.
frefik
QTreeWidget. Можно подробнее, очень надо. Как считывать понятно. На счет потока не понятно, надо что бы сразу же после конца песни запускалась другая.
RazrFalcon
Проще всего: посмотреть чужие исходники. К примеру SMPlayer.

А вообще, берем все время трека, затем каждую секунду, к примеру, смотрим текущее положение (если это возможно), и сравниваем.
Также, можно написать сигнал, который будет реагировать на окончание трека. Вы вообще что используете для воспроизведения?
frefik
Дело в том что программа запускает файлы, с помощью программ которые ассоциированные с ними.

алгоритм следующий:
1.процесс запустить(имя программы, файл...)
2. отсчет времени(time.start())
3. проверка, если переменная time приравнивается продолжительности файла, то завершить и подать на обработку следующий файл.


Я впал в какую-то рекурсию, могу представить как проделать это с одним файлом, но как сделать поочередно с файлами.

Пожалуйста отпишитесь.
RazrFalcon
То есть Вы через QProcess стартуете?

Прога сама завершается или вы ее сами закрываете? Так как можно было просто поставить waitForFinished(), который, к слову, поддерживает задание времени. Так что можно и от сюда плясать.

Так же можно сделать kill() процессу, через нужное время. Но это убивает прокрутку и паузы.
frefik
Да.
Можете привести пример пожалуйста.

Грубо говоря задача следующая:
файл video1.avi, продолжительность 10 минут
файл video2.avi, продолжительность 5 минут
файл video3.avi, продолжительность 34 минут
Задача поочередно файлы, проиграть программой по-умолчанию.
Не просто запустить, а запустить первый подождать(как?) 10 минут, завершить первый, запустить второй и.т.д.

Мне бы пример.
Как бы вы её реализовали?
RazrFalcon
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
RazrFalcon, а события GUI (например, таскание окошка) когда обрабатывать будешь?
RazrFalcon
Можно во втором потоке запускать.
И да, я просто предложил.
Все равно ТС нужно запускать приложения, а как это сделать без QProcess я не знаю.
Litkevich Yuriy
просто QProcess может сам работу работать, нужно толко к его сигналам подключтся, вместо того, чтобы зациклившись ждать, когда он закончит.
RazrFalcon
Как?
Litkevich Yuriy
читать асистент
frefik
RazrFalcon
Спасибо за помощь

Задачу решил с помощью второго потока и функции sleep() :D .
Кидаю с помощью сигнала QList<QTreeWidgetItem *> list(итемы таблицы) и далее в функции работаю сними, тупо вызываю sleep(), продолжительностью равную длительности файла.
Решение нормальное или тут что-то дико?
RazrFalcon
Ну если пауза/перемотка не нужна - то норм.

Как по мне, лучше всего настроить в запускаемом плеере автозавершение по окончании воспроизведения. А в вашей проге просто ждать, ака waitForFinished(). ИМХО.
frefik
Без привязки к конкретному плееру и там еще не только видео файлы, вообщем sleep(), самое то.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.