【问题标题】:Strange error with QListWidgetItem that uses QIcon使用 QIcon 的 QListWidgetItem 出现奇怪错误
【发布时间】:2012-10-05 23:29:30
【问题描述】:

我正在构建一个 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 对其进行了测试,图像在列表中正确显示,但崩溃后出现相同的消息。

【问题讨论】:

  • QIcon(act_fullname)item-&gt;setIcon(icon) 是否产生此错误?
  • 向我们展示您调用QObject::moveToThread(QThread*)的代码。
  • 感谢您的提问!根据要求添加了详细信息。
  • 好吧,我已经链接了 boost_system-mt 和 boost_filesystem-mt。这可能是问题的核心吗?我没有没有 mt 的 boost 库,我也不会走那条线。
  • 您是否尝试过“导出 DYLD_PRINT_LIBRARIES=1 并检查是否只加载了一组二进制文件”?

标签: qt boost qt4 icons qlistwidget


【解决方案1】:

我终于找到了解决方案:手动删除了 Debug 和 Release 目录。
对于那些没有解决类似问题的人,请参阅:this link

【讨论】:

    猜你喜欢
    • 2020-08-30
    • 2013-05-05
    • 1970-01-01
    • 2010-11-05
    • 2012-05-05
    • 2011-06-16
    • 1970-01-01
    • 2012-12-26
    • 2011-01-08
    相关资源
    最近更新 更多