我有一个名为 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/