Qt 使用QIcon的QListWidgetItem出现奇怪错误

Qt 使用QIcon的QListWidgetItem出现奇怪错误,qt,boost,qt4,icons,qlistwidget,Qt,Boost,Qt4,Icons,Qlistwidget,我正在构建一个QListWidget,浏览一个目录,这样每个“.png”都会列出一个预览图标 我的填充循环的核心如下所示: new QListWidgetItem( QIcon(act_fullname), act_filename); 整个列表准备就绪后,应用程序立即崩溃。 该错误重复多次,并表示: 在Mac OS X上,您可能正在将两组Qt二进制文件加载到 同样的过程。检查所有插件是否根据正确的Qt编译 二进制文件。导出DYLD_PRINT_LIBRARIES=1并检查是否只有一组 正在加

我正在构建一个QListWidget,浏览一个目录,这样每个“.png”都会列出一个预览图标

我的填充循环的核心如下所示:

new QListWidgetItem( QIcon(act_fullname), act_filename);
整个列表准备就绪后,应用程序立即崩溃。 该错误重复多次,并表示:

在Mac OS X上,您可能正在将两组Qt二进制文件加载到 同样的过程。检查所有插件是否根据正确的Qt编译 二进制文件。导出DYLD_PRINT_LIBRARIES=1并检查是否只有一组 正在加载二进制文件。QObject::moveToThread:当前线程 (0x103339cb0)不是对象的线程(0x10a848670)。无法移动到 目标线程(0x103339cb0)

在Mac OS X上,您可能正在将两组Qt二进制文件加载到 同样的过程。检查所有插件是否根据正确的Qt编译 二进制文件。导出DYLD_PRINT_LIBRARIES=1并检查是否只有一组 正在加载二进制文件

你有什么想法吗

谢谢你的帮助

编辑:

如果我跳过图标,就没有问题了。我也试过去

QListWidgetItem *item = new QListWidgetItem(act_filename);
ui->listWidget->addItem(item);
item->setIcon(QIcon(act_fullname));
没有区别

编辑2:

我不调用
QObject::moveToThread(QThread*)
我甚至不使用线程(至少是故意的)

此外,错误似乎出现在循环之后。我已经完成了每一次迭代和循环的结束,在我的“结束循环cout msg”之后,我看到了这一点

objc[56963]:类QCocoaColorPanelDelegate在两个 /Users/Barnabas/QtSDK/Desktop/Qt/4.8.1/gcc/lib/QtGui.framework/Versions/4/QtGui 和 /Users/Barnabas/Programming/Qt/demo_OpenCV-build-desktop-desktop_Qt_4_8_1_for_GCC_Qt_SDK_发布/demo_OpenCV.app/Contents/MacOS/。/Frameworks/QtGui.framework/Versions/4/QtGui。 将使用其中一个。哪一个是未定义的

在这里,我也不使用QCocoaColorPanelDelegate。我甚至不知道这是什么…:(

但以下是我更详细的代码:

boost::filesystem::path p("/path/to/dir");
if(boost::filesystem::is_directory(p))
{
    for(boost::filesystem::directory_iterator it(p); it!=boost::filesystem::directory_iterator(); ++it)
    {
        if(it->path().extension().string()==".png")
        {
            std::cout<< it->path() <<std::endl;
            QString item_name( it->path.stem().c_str() );
            QString screen_file( it->path.c_str() );
            QListWidgetItem *item = new QListWidgetItem(item_name);
            QIcon *icon = new QIcon(screen_file);
            item->setIcon(*icon); // if I comment this one out, everything is fine.
            ui->imageList->addItem(item);
        }
    }
}
boost::filesystem::path p(“/path/to/dir”);
if(boost::filesystem::is_目录(p))
{
for(boost::filesystem::directory_iterator it(p);it!=boost::filesystem::directory_iterator();++it)
{
if(it->path().extension().string()==“.png”)
{
std::coutpath()path.c_str());
QListWidgetItem*item=新的QListWidgetItem(项目名称);
QIcon*图标=新QIcon(屏幕文件);
item->setIcon(*icon);//如果我把这个注释掉,一切都好。
ui->imageList->addItem(项目);
}
}
}

我还使用一个.png对其进行了测试,图像在列表中正确显示,但崩溃后出现了相同的消息。

我终于找到了解决方案:手动删除调试和发布目录。

对于其类似问题未通过此方法解决的用户,请参见:

QIcon(act_fullname)
是否生成此错误或
item->setIcon(icon)
?将您的代码显示在调用
QObject::moveToThread(QThread*)
的位置。感谢您的提问!根据要求添加了详细信息。我已经链接了boost_system-mt和boost_filesystem-mt。这可能是问题的核心吗?我没有没有没有mt的boost libs,我也不会使用这一行。您是否尝试过“Export DYLD_PRINT_LIBRARIES=1并检查是否只加载了一组二进制文件”?