从QListWidget获取小部件

时间:2014-11-09 11:24:48

标签: c++ qt qwidget qlistwidget

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

2 个答案:

答案 0 :(得分: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)。

答案 1 :(得分:2)

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

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

但是,Qt定义了它自己的转换函数,所以你应该使用qobject_cast<VideoWidget*>(ui->myList->itemWidget(item) )