여기 내 코드입니다 :QMediaPlayer :: duration()이 -1 값을주는 이유는 무엇입니까?
QString BoatProgramming::setDuration(QString path)
{
if (path.isNull()) { return ""; }
QMediaPlayer mp;
mp.setMedia(QUrl::fromLocalFile("/home/akiva/deleteme.ogg"));
qDebug() << mp.duration(); // Outputting a value of -1
m_Duration = QString::number(mp.duration());
emit durationChanged();
return m_Duration;
}
어딘가에 분명히 오류가 있습니다 만, 파일 이름을 확인하는 이상, 나는 문제가 무엇인지에 관해서는 유감스럽게도 나쁘게입니다. 단순히 .ogg
이 지원되지 않을 수 있습니까? 객체가 메모리에 완전히로드되기 전에 함수를 호출합니까? 아니면 다른 것입니까?
감사합니다. docs에서 비동기 로딩
제 생각에는 다릅니다. 코드를 메인에서 테스트 한 후에는 일이 순조롭게 진행되므로 코드가 작동합니다. 그러나 그것을 내 자신의 수업에서 시험하면, 나는 1 년을 기다릴 수 있고, 그 신호는 절대로 발동하지 않을 것입니다. 그러나 이것을 다음과 같이 변경합니다 : QObject :: connect (& m_MediaPlayer, & QMediaPlayer :: durationChanged, [&] (qint64 fun)' – Akiva
그건 그렇고, 나는 인터넷 검색을 시도했지만, 무엇이든 그 구문은 무엇을합니까? [&]'는 무엇을합니까? 나는 그것을 전혀 보지 못했습니다. – Akiva
@Akiva, 이것은 C++ 11 람다 식입니다. [이 질문에] (http://stackoverflow.com /]/7627098/2666212)'[&]'구문은 람다가 참조하는 변수를 캡쳐합니다. 클래스 메소드의 지역 변수에 대해 그렇게하지 않으면, 귀하의 람다 (이 아마도 메인에서 일하는 이유는 귀하의 클래스에서 작동하지 않습니다.) 당신이 람다 표현에 익숙하지 않은 경우, 대신 정상 슬롯을 사용하여 이러한 문제를 피하십시오 (즉, 그냥이 람다 함수를 수업에 정의되어 있습니다.) – Mike