从QListWidget获取小部件

get widget from QListWidget

本文关键字:小部 获取 QListWidget      更新时间:2023-10-16

我有一个名为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) );行。我不确定我在这里错过了什么。

  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)。

您的行没有意义。<dynamic_cast>不是有效的C++。它是一个无效的名称,不能是模板参数,因为在它之前没有期望函数/类的模板

它应该是C++中的dynamic_cast<VideoWidget*> (ui->myList->itemWidget(item) )

但是,Qt定义了自己的强制转换函数,因此应该使用qobject_cast<VideoWidget*>(ui->myList->itemWidget(item) )