我想检查是否在用户的计算机上使用Qt在C ++中安装了Matlab。这可能吗?我读了一些关于QProcess的事情,但似乎没有人确定它,如果它是一个跨平台的解决方案。 任何帮助将不胜感激。
答案 0 :(得分:0)
我和其他软件有类似的问题,例如:
QString qstr_ext = ".ext_data";
LPCWSTR wstr_ext = (const wchar_t*)qstr_ext.utf16();
// Create and reset buffer
TCHAR buff[1024];
DWORD size = sizeof(buff);
memset(&buff, '\0', sizeof(buff));
// Read application path for extension
HRESULT err = AssocQueryString(ASSOCF_INIT_IGNOREUNKNOWN, ASSOCSTR_EXECUTABLE, wstr_ext, NULL, buff, &size);
if(S_OK == err)
{
// Convert to wstring
std::wstring wstring_data(&buff[0]);
// To QString
QString appPath = QString::fromStdWString(wstring_data);
qDebug() << appPath;
}
正在做的是从注册表中获取'文件扩展名'(对于Matlab file extensions),然后使用安装了matlab的Windows API读取。
要在跨平台中使用它,会更复杂,因为在Windows上你可以读取注册表,例如你可以使用'find'命令行找出它在哪里(如果存在那么命令会返回位置)
类似的方法可以在Linux上完成 - 使用'find'命令。
所以QProcess是一种方法,但在* nix平台上相当慢,因为没有安装应用程序的'注册表'(AFIK没有注册表,你可以使用debian中的apt-get来查找是安装与否,但不是跨Linux解决方案)