我有一个名为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) );
。我不确定我在这里缺少什么。
答案 0 :(得分:4)
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
)。
答案 1 :(得分:2)
你的路线没有意义。 <dynamic_cast>
无效C ++。它是一个无效的名称,并且不能作为模板参数,因为没有期望函数/类的模板在它之前。
在C ++中它应该是dynamic_cast<VideoWidget*> (ui->myList->itemWidget(item) )
但是,Qt定义了它自己的转换函数,所以你应该使用qobject_cast<VideoWidget*>(ui->myList->itemWidget(item) )