我有一个名为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
)。
您的行没有意义。<dynamic_cast>
不是有效的C++。它是一个无效的名称,不能是模板参数,因为在它之前没有期望函数/类的模板
它应该是C++中的dynamic_cast<VideoWidget*> (ui->myList->itemWidget(item) )
但是,Qt定义了自己的强制转换函数,因此应该使用qobject_cast<VideoWidget*>(ui->myList->itemWidget(item) )