我有一个名为VideoWidget的自定义QWidget类,该类用于填充QListWidget ui->myList。双击列表中的任何项目,应给我其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)。

关于c++ - 从QListWidget获取小部件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26827640/

10-11 12:29