У меня есть собственный класс QWidget, называемый VideoWidget
который я использовал для заполнения моего QListWidget ui->myList
. VideoWidget
по любому элементу списка должен дать мне его VideoWidget
.
connect(ui->myList,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(playClip(QModelIndex)));
void MainWindow::playClip(QModelIndex index){
QListWidgetItem* item = ui->myList->itemAt(0,index.row());
VideoWidget widget = <dynamic_cast>(VideoWidget*)( ui->myList->itemWidget(item) );
cout << "custom widget data" << widget.getMyData() << endl;
}
Это не позволит мне скомпилировать строку VideoWidget widget = <dynamic_cast>(VideoWidget*)( ui->myList->itemWidget(item) );
, Я не уверен, что мне здесь не хватает.
Синтаксис dynamic_cast
VideoWidget *widget = dynamic_cast<VideoWidget*>(ui->myList->itemWidget(item));
Вероятно, вы должны использовать qobject_cast
, поскольку это QObject:
VideoWidget *widget = qobject_cast<VideoWidget*>(ui->myList->itemWidget(item));
Добавьте код, по крайней мере, Q_ASSERT(widget);
, после актера, чтобы убедиться, что приведение выполнено успешно (возвращает nullptr
для неудачного каста).
Ваша линия не имеет смысла. <dynamic_cast>
недействителен C++. Это недопустимое имя и не может быть параметром шаблона, так как перед ним не ожидается шаблон, ожидающий функции/класса.
Это было бы dynamic_cast<VideoWidget*> (ui->myList->itemWidget(item) )
в C++
Однако Qt определяет его собственную функцию кастинга, поэтому вы должны использовать qobject_cast<VideoWidget*>(ui->myList->itemWidget(item) )
VideoWidget* widget =
, правильно ?. Я получаю сообщение об ошибке "статическое утверждение не удалось: qobject_cast требует, чтобы тип имел макрос Q_OBJECT", когда я делаю это сqobject_cast
^