0

我们使用 C++/QT 为 MAC OSX 开发了一个“.app”安装程序。即使在加载来自本地文件系统的 html 文件时,我们也面临着 loadFinished 信号被间歇性调用的问题。

我发现了一些关于 loadFinished 信号被多次调用的其他帖子。在我的情况下,该信号仅被调用一次且为 false。

有人遇到过这种问题吗?依赖值为 100 的 loadProgress 信号可以吗?

QT - 4.8.2
Mac OS X - 10.7

代码片段:-

boost::scoped_ptr<QWebView> m_webViewP;
static const boost::filesystem::path kJSEntryPoint = boost::filesystem::path("web") / boost::filesystem::path("index.html");

QUrl fileURL(QString::fromStdString(ISettingsManager::getInstance()->getJSEntryPoint()));
Log(INFO, "Loading auth page[%s].", qPrintable(fileURL.toString()));
m_webViewP->load(fileURL);
m_webViewP->activateWindow();
m_webViewP->raise();


const std::string SettingsManagerImpl::getJSEntryPoint() const
{
    boost::filesystem::path retPath;

    retPath = getAppDir_();

    retPath /= kJSEntryPoint;
    std::string toRet = retPath.string();
    convertToURL_(toRet);

    return toRet;
}


void SettingsManagerImpl::convertToURL_(std::string &path) const
{
    size_t index = path.find(kBackSlash);
    while (index != std::string::npos)
    {
        path.replace(index, 1, kForwarSlash);
        index = path.find(kBackSlash);
    }

    path = kURLPrefix + path;
}   

boost::filesystem::path SettingsManagerImpl::getAppDir_() const
{
#ifdef _WIN32
    TCHAR pathName[MAX_PATH];
    if (::GetModuleFileName(NULL, pathName, MAX_PATH) == 0)
    {
        SSLog(ERROR, "Error while retrieving app path.");
        return "";
    }

    ::PathRemoveFileSpec(pathName);

    return boost::filesystem::path(pathName);
#else
    NSAutoreleasePool *poolP = [[NSAutoreleasePool alloc] init];

    NSString *pathP = [[NSBundle mainBundle] executablePath];
    pathP = [pathP stringByDeletingLastPathComponent];

    boost::filesystem::path toRet([pathP cStringUsingEncoding:NSASCIIStringEncoding]);

    [poolP drain];
    return toRet;
#endif
}
4

0 回答 0