Я пишу приложение, используя QDialog в качестве основного окна. В этом приложении у меня есть 3 QGroupBox, один с несколькими кнопками, второй с GLWidget, отображающий контент веб-камеры (захваченный и обработанный с помощью OpenCV и отображенный с OpenGL), а в третьем я пытался воспроизводить различные видео с помощью Phonon (в основном Я намерен выбрать видео с помощью QComboBox, хотя это не относится к моей проблеме).
Все работает, графический интерфейс инициализируется, делает все, что мне нужно ... пока я не попытаюсь создать объект VideoWidget. Это код моего класса:
GUIT::GUIT(QWidget *parent, Qt::WFlags flags)
{
// Initialization of the different QGroupBox
createVideo();
createButtons();
createScoreFE();
createPhonon();
gbScoreFE->hide();
QHBoxLayout *layout = new QHBoxLayout;
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(gbVideo, 0, 0);
mainLayout->addWidget(gbButtons, 1, 0);
mainLayout->addWidget(gbScoreFE, 0, 0);
layout->addLayout(mainLayout);
layout->addWidget(gbPhonon);
gbPhonon->hide();
this->setLayout(layout);
layout->setSizeConstraint(QLayout::SetFixedSize);
}
И метод, который дает сбой:
void GUIT::createPhonon()
{
gbPhonon = new QGroupBox(tr("Test"));
// This line makes the program to stop executing.
Phonon::VideoWidget *_player_video = new Phonon::VideoWidget;
QVBoxLayout *layout = new QVBoxLayout;
gbPhonon->setLayout(layout);
}
Как происходит сбой ?? Ну, это просто убивает несколько потоков после создания нового VideoWidget. Это выглядит так:
The thread 'Win32 Thread' (0x12e8) has exited with code 1 (0x1).
The thread 'Win32 Thread' (0x1304) has exited with code 1 (0x1).
The thread 'Win32 Thread' (0xf20) has exited with code 1 (0x1).
The thread 'Win32 Thread' (0xdec) has exited with code 1 (0x1).
The thread 'QThread' (0x1e20) has exited with code 1 (0x1).
The thread 'Win32 Thread' (0x19b0) has exited with code 1 (0x1).
The thread 'Win32 Thread' (0x1f58) has exited with code 1 (0x1).
The thread 'Win32 Thread' (0x1794) has exited with code 1 (0x1).
Правда в том, что я немного запутался в этой проблеме. Он возник во время написания QWidget, где я собирался создать VideoWidget с его компонентами ... Я проверил другие классы Phonon, и GUI не затрагивается при их инициализации. Например:
Phonon::MediaObject *mediaObject = new Phonon::MediaObject(this);
Я также пытался воспроизвести проблему с помощью более простого графического интерфейса, и он компилируется и работает без проблем, поэтому должно быть что-то, что находится в конфликте с Phonon. Я думал, что это может быть GLWidget, но я отключил эту часть графического интерфейса ... и он по-прежнему убивает потоки.
Кто-нибудь сталкивался с подобной проблемой? Есть ли у кого-нибудь понимание того, что может пойти не так или как проверить, убивает ли поток?