1

我正在开发应用程序设计器中的应用程序。在应用程序中,用户将在运行一些计算之前选择一堆选项。为了简化这个过程,我添加了一个“另存为...”菜单,以便用户可以将当前设置保存到文件 ( .mat) 并在下次打开应用程序时重新加载它们。

我想要实现的是用户可以双击以前保存的.mat文件,这将启动应用程序,应用程序将自动读取双击的文件并加载所有设置。

所有这些都需要在应用程序被编译并作为可执行文件分发之后发生。

我认为实现此目的的一种方法是创建一个应用程序的启动窗口,该窗口调用主窗口,将文件路径作为参数传递。

任何建议将不胜感激。

4

2 回答 2

2

嗨,我想我可能有一个相当简单的解决方案,尽管涉及到你。

简要解决方案概述 (TL;DR)

使用扩展名以外.mat的扩展名保存应用程序中的设置,例如.mydat。添加一个App Input Argument并将startupFcn该参数视为文件的文件名,*.mydat确保还处理该参数被遗漏的情况。保存第一个输出文件后,使用 windows Open with...选择您的应用程序。现在双击该*.mydat文件将打开您的应用程序.exe,并将单击文件的文件名提供给您的startupFcn.


MATLAB 2018a 中的一个示例,作为 Windows 10 上的已编译 exe。

好的,开始。让我们设置一个简单的应用程序(我称之为 runAppFromData),它将字符串输入到编辑字段并将其保存在名为“settingsValues.mydat”的文件中。看起来像:

小应用程序保存首选项

保存按钮的回调将收集Value到一个名为的局部变量value中,然后将其保存到磁盘:

% Button pushed function: Save
function save(app, event)
    value = app.InputField.Value;%#ok
    % User selects save location
    saveLocation = uigetdir();
    % Now just save the value variable to the selected location.
    save(fullfile(saveLocation,'settingsValues.mydat'), 'value', '-mat');
end

我不知道何时appdesigner添加了“使用输入运行应用程序”的功能,但我在 2018a 中拥有它:

应用程序设计器输入参数

我们做一个单一的输入,fileName它需要一个文件名作为一个字符串(你会在下面看到为什么)。所以添加输入并单击确定。然后我们被发送到startupFcn. 在这里,我们将编写解析输入文件的逻辑。对于我的简单示例应用程序,我将输入文件加载到结构中,然后将值发送到编辑字段:

% Code that executes after component creation
function startupFcn(app, fileName)
    if nargin < 2 % app is itself an argument
        % just continue running the application without error
        return
    end
    % fileName is a string, so let's load it into a struc
    S = load(fileName, '-mat');
    % The value field will be there because that is how we wrote it
    app.InputField.Value = S.value;
end

请注意,我执行了一项nargin检查以处理首次运行的案例(以及任何时候从实际的可执行文件运行应用程序)。

MATLAB 不关心 matlab 文件的文件扩展名是什么,如果您有未知的文件扩展名,例如.mydata,在 windows 中双击该文件会要求您选择应用程序,这对您的部署有利:

Windows打开文件...


有几件事需要考虑。

从应用程序打开时,.exe它将始终显示默认值。如果您想输入一些其他默认值,您可以编辑您的 Windows 快捷方式目标字段以提供所需输入文件的文件路径(请参见此处)。这样可以节省使用新默认值重新编译,但文件必须保留在某个地方(您也可以将其与应用程序一起打包)。

对不起,这个答案太长了!我希望它有帮助!

于 2018-08-29T00:24:49.470 回答
0

您不能双击 .mat 文件并打开整个可执行文件,但您绝对可以添加一个要求您打开 .mat 文件的启动功能。我的建议是确保您至少有一个模板文件,以便用户在第一次运行没有文件可打开的程序时不会遇到问题。

于 2018-08-03T12:41:29.347 回答