#c #user-interface #wxwidgets
#c #пользовательский интерфейс #wxwidgets
Вопрос:
Я пытаюсь создать музыкальное приложение, используя wxWidgets
, я тоже новичок в wxWidgets
C , я создал функцию, которая должна обновлять прошедшее время, когда пользователь воспроизводит песню, поэтому панель поиска и цифровые часы обновляются с позицией песни каждую секунду. Я настроил wxTimer
так
timer = new wxTimer(this);
timer->Bind(wxEVT_TIMER, amp;Frame::UpdateElapsedTime, this);
и функция, которая запускает таймер,
void Frame::Play(wxCommandEventamp; event)
{
stopped = false;
int songIndex = 0;
std::string Song;
wxString wxSong;
songIndex = playlistBox->GetSelection();
wxSong = playlistBox->GetString(songIndex);
Song = std::string(wxSong);
Song = "/home/apoorv/Music/mod/" Song;
std::cout << "wxString: " << wxSong << std::endl;
std::cout << "Song: " << Song << std::endl;
mediaCtrl->Load(Song);
mediaCtrl->Play();
timer->Start(1000);
}
и функция, которую я хочу обновлять каждую секунду, это
void Frame::UpdateElapsedTime(wxTimerEventamp; event)
{
wxLogMessage("OnTimer called.");
seekBar->SetValue(mediaCtrl->Tell());
seekBar->SetMax(mediaCtrl->Length());
std::string SongTime = std::to_string(mediaCtrl->Tell() / 60000) ":" std::to_string(mediaCtrl->Tell() / 1000)
"/" std::to_string(mediaCtrl->Length() / 60000) ":" std::to_string(mediaCtrl->Length() / 1000);
staticText->SetLabel(SongTime);
}
Он компилируется нормально, но ничего не происходит. Я делал подобное, когда использовал wxPython
до этого, и это сработало.
Комментарии:
1. @apoorv569 Не могли бы вы попробовать вызвать
Bind()
onthis
вместо ontimer
?2. @apoorv569, вы сами создаете кнопку воспроизведения и элементы управления, а не вызываете
ShowPlayerControls()
?3. @apoorv569, эта функция будет использовать внутренние элементы управления проигрывателя. Создайте и запустите образец мультимедиа — он показывает, что он делает. По сути, у вашего базового проигрывателя уже есть все эти элементы управления. Вам просто нужно показать их с помощью этого вызова. Проблема в том, что они есть не у всех игроков. Посмотрите, можете ли вы отобразить внутренние, а если нет — создайте их самостоятельно. Кроме того, небольшое предложение — если вы чего-то не понимаете в wx, попробуйте пример. Если это все еще не ясно — попробуйте.
4. Есть ли вероятность, что что-то вызывает
timer->Stop()
? Если, например, ваша кнопка «Стоп» делает это, можете ли вы проверить, вызывается ли ее обработчик каким-либо образом (случайно или нет)?5. @apoorv569 Я рад, что проблема устранена. Что касается перемещения функций, возможно, было бы лучше опубликовать это как еще один вопрос, поскольку этот уже становится слишком длинным с комментариями. В общем, делать ваши виджеты статичными — плохая идея, поэтому сначала подумайте / найдите другие способы разделения кода.