получить виджет из QListWidget

0

У меня есть собственный класс 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) ); , Я не уверен, что мне здесь не хватает.

Теги:
qt
qwidget
qlistwidget

2 ответа

4
Лучший ответ
  1. Синтаксис dynamic_cast

    VideoWidget *widget = dynamic_cast<VideoWidget*>(ui->myList->itemWidget(item));
    
  2. Вероятно, вы должны использовать qobject_cast, поскольку это QObject:

    VideoWidget *widget = qobject_cast<VideoWidget*>(ui->myList->itemWidget(item));
    
  3. Добавьте код, по крайней мере, Q_ASSERT(widget); , после актера, чтобы убедиться, что приведение выполнено успешно (возвращает nullptr для неудачного каста).

  • 0
    это должен быть VideoWidget* widget = , правильно ?. Я получаю сообщение об ошибке "статическое утверждение не удалось: qobject_cast требует, чтобы тип имел макрос Q_OBJECT", когда я делаю это с qobject_cast ^
  • 0
    @testus Упс, да, конечно ... :)
Показать ещё 5 комментариев
2

Ваша линия не имеет смысла. <dynamic_cast> недействителен C++. Это недопустимое имя и не может быть параметром шаблона, так как перед ним не ожидается шаблон, ожидающий функции/класса.

Это было бы dynamic_cast<VideoWidget*> (ui->myList->itemWidget(item) ) в C++

Однако Qt определяет его собственную функцию кастинга, поэтому вы должны использовать qobject_cast<VideoWidget*>(ui->myList->itemWidget(item) )

Ещё вопросы

Сообщество Overcoder
Наверх
Меню