0

我使用 Qt 5.9 编写了一个电子表格程序,然后通过Qt Installer Framework (QtIFW2.0.1) 为它创建了一个安装程序。然后我把程序发给了我的许多朋友。他们在他们的 Windows 机器上安装了该应用程序,现在正在使用它,但他们都有一个共同的问题:
当他们保存应用程序的文件时,这些文件在桌面上显示为“未知”文件。

问题只是存储文件的形状和外观而不是它们的功能,如果双击它们会被应用程序打开。

问题是,需要对代码进行哪些更改才能让程序显示其文件的形状/外观?
例如,我们使用图像文件或类似文件为代码提供特定形状,以映射到存储的文件上,并且以这种方式显示它们是已知的。

4

1 回答 1

2

这实际上与 Qt 或 C++ 本身无关。您只需在 Windows shell 中注册您的文件扩展名,以便其他 Windows 组件/shell 可以理解它。

这是有关windows 下文件类型和文件关联的一般信息。

您需要创建一些如下所示的 Windows 注册表项:

例子.reg:

Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USER\Software\Classes\myfirm.myapp.v1\shell\open\command]
    @="c:\path\to\your\app.exe \"%1\""
    [HKEY_CURRENT_USER\Software\Classes\.myextension]
    @="myfirm.myapp.v1"

在这里您可以阅读它的一般工作原理

myfirm.myapp.v1将 .exe的路径和路径更改.myextension为您喜欢的名称。现在 Windows 将知道.myextension您的应用程序应该打开哪些带有扩展名的文件。如果您双击此文件,您的应用程序将path to file作为参数运行。你可以在你的main()函数中得到它

要为您的扩展程序设置图标,请添加注册表项Software\\Classes\\.myextension\\DefaultIcon并将其默认值设置为您的应用程序的完整路径,以便 Windows 可以从您的 .exe 应用程序文件中获取扩展程序的图标。

您也可以在运行时直接在您的应用程序中执行此操作:

QSettings s("HKEY_CURRENT_USER\\SOFTWARE\\CLASSES", QSettings::NativeFormat);

QString path = QDir::toNativeSeparators(qApp->applicationFilePath());
s.setValue(".myextension/DefaultIcon/.", path);
s.setValue(".myextension/.","myfirm.myapp.v1");
s.setValue("myfirm.myapp.v1/shell/open/command/.", QStringLiteral("\"%1\"").arg(path) + " \"%1\"");

编辑:还有一个,用 Qt Installer 来做,看看这里的答案

于 2017-09-14T11:56:28.797 回答