Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从QListWidget获取小部件_C++_Qt_Qwidget_Qlistwidget - Fatal编程技术网

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类,用于填充我的QListWidget
ui->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。谢谢