我们使用 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
}