我正在构建一个 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-ed 每次迭代和循环结束,在我的“结束循环 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__Release/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);
}
}
}
我还使用单个 .png 对其进行了测试,并且图像在列表中正确显示,但崩溃后出现了完全相同的消息。