c++ - 如何在 C++ 中检查程序是否安装了 Qt

标签 c++ qt

我想检查是否在使用 C++ 中的 Qt 的用户计算机上安装了 Matlab。这可能吗?我阅读了一些关于 QProcess 的内容,但似乎没有人确定它是否是跨平台解决方案。 任何帮助将不胜感激。

最佳答案

我在其他软件上也有类似的问题,这里是示例:

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 ),然后使用 Windows API 读取安装了 matlab 的位置。

要在跨平台中使用它,会更复杂,因为在 Windows 上你可以读取注册表,例如在 OSX 上你可以使用'find'命令行找出位置(如果存在则命令将返回位置)

可以在 Linux 上使用类似的方法 - 使用“查找”命令。

所以 QProcess 是一种方法,但在 *nix 平台上速度很慢,因为没有安装或未安装应用程序的“注册表”(AFIK 没有注册表,例如您可以在 debian 中使用 apt-get 来查找是安装与否,但不是跨linux解决方案)

关于c++ - 如何在 C++ 中检查程序是否安装了 Qt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35766744/

相关文章:

c++ - 从文件的特定部分(复制到文档目录中)初始化 NSInputStream?

c# - 为什么只有 AVX 的处理器在许多 SIMD 算法方面优于 AVX2 处理器?

c++ - 长号。分配

c++ - 带有滚动条的 QGraphicsView 内不需要的边距

c++ - Qt:如何为 QLabel 创建清晰可见的发光效果? (例如使用 QGraphicsDropShadowEffect)

c++ - 获取/释放内存顺序

c++ - 在 Matlab 中加载 .dll 导致 'type not found' 问题

c++ - OpenGL 纹理未显示(纯色而不是纹理)或显示有伪影

c++ - 应显示的项目未显示

c++ - QML:自定义 QObject 类型错误