C++ 从QListWidget获取小部件
我有一个名为C++ 从QListWidget获取小部件,c++,qt,qwidget,qlistwidget,C++,Qt,Qwidget,Qlistwidget,我有一个名为VideoWidget的定制QWidget类,用于填充我的QListWidgetui->myList。双击列表中的任何项目都会显示其视频小部件 connect(ui->myList,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(playClip(QModelIndex))); void MainWindow::playClip(QModelIndex index){ QListWidgetItem* item = ui-&g
VideoWidget
的定制QWidget类,用于填充我的QListWidgetui->myList
。双击列表中的任何项目都会显示其视频小部件
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;
}
connect(ui->myList,信号(双击(QModelIndex)),这个,插槽(playClip(QModelIndex));
void主窗口::播放剪辑(QModelIndex索引){
QListWidgetItem*item=ui->myList->itemAt(0,index.row());
VideoWidget=(VideoWidget*)(ui->myList->itemWidget(item));
库特
dynamic\u cast
的语法为
VideoWidget *widget = dynamic_cast<VideoWidget*>(ui->myList->itemWidget(item));
在强制转换后添加代码,至少是Q_ASSERT(widget);
,以验证强制转换是否成功(对于失败的强制转换,返回nullptr
)
dynamic\u cast
的语法为
VideoWidget *widget = dynamic_cast<VideoWidget*>(ui->myList->itemWidget(item));
在强制转换后添加代码,至少是Q_ASSERT(widget);
,以验证强制转换是否成功(对于失败的强制转换,返回nullptr
)
<>你的行没有意义。<代码> <代码>无效C++。它是无效的名称,不能是模板参数,因为没有模板期望的函数/类在它前面。
它应该是C中的dynamic_cast(ui->myList->itemWidget(item))
++
<>但是,Qt定义了它自己的铸造函数,所以你应该使用<代码> QObjutsPaskIE(UI -> MyList-> ItWiMeGET(项))< /C> < /P> > P>你的行没有意义。<代码> <代码>无效C++。
它应该是C中的dynamic_cast(ui->myList->itemWidget(item))
++
但是,Qt定义了自己的强制转换函数,因此您应该使用qobject\u cast(ui->myList->itemWidget(item))
它必须是VideoWidget*widget=
,对吗?。我收到错误“静态断言失败:qobject\u cast要求类型具有Q\u对象宏”当我使用qobject\u cast
^执行此操作时,会出现什么错误?我的主窗口中确实有Q\u OBJECT宏header@testus是的,任何QObject子类都必须具有Q_OBJECT宏。请使用Qt Creator新建类向导创建新类,这样您就不会忘记。在这种情况下,您可以创建一个虚拟类s只是看看它在.h文件和构造函数中放了什么。另外,记住在.pro文件头中列出.h文件,否则它将不会被moc处理(这是创建信号、插槽和反射所需的Qt元对象信息的原因).Nevermind,我明白了。我必须再次运行qmake。现在我可以毫无问题地使用qobject\u cast。谢谢,它必须是VideoWidget*widget=
,对吗?我收到错误“静态断言失败:qobject\u cast要求类型具有Q\u对象宏”当我使用qobject\u cast
^执行此操作时,会出现什么错误?我的主窗口中确实有Q\u OBJECT宏header@testus是的,任何QObject子类都必须具有Q_OBJECT宏。请使用Qt Creator新建类向导创建新类,这样您就不会忘记。在这种情况下,您可以创建一个虚拟类s只是看看它在.h文件和构造函数中放了什么。另外,记住在.pro文件头中列出.h文件,否则它将不会被moc处理(这是创建信号、插槽和反射所需的Qt元对象信息的原因).没关系,我明白了。我必须再次运行qmake。现在我可以毫无问题地使用qobject\u cast。谢谢