首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从文件存储设置启动App,并在启动时加载它们

从文件存储设置启动App,并在启动时加载它们
EN

Stack Overflow用户
提问于 2018-08-03 01:50:11
回答 2查看 1K关注 0票数 1

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

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

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

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

任何建议都会很感激的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-29 00:24:49

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

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

.mat以外的扩展名保存应用程序中的设置,例如.mydat。添加一个应用程序输入参数,并让startupFcn将该参数作为文件名处理到*.mydat文件中,并确保同时处理该参数被忽略的情况。保存第一个输出文件后,使用windows Open with.选择你的应用程序。现在,双击*.mydat文件将打开应用程序的.exe,并将单击文件的文件名提供给startupFcn中的输入参数。

在Matlab2018a中的一个示例是windows 10上编译的exe。

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

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

代码语言:javascript
运行
复制
% 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,它需要一个文件名作为字符串(您将在下面看到原因)。因此,添加输入并单击OK。然后我们被发送到startupFcn的“代码视图”。在这里,我们将编写解析输入文件的逻辑。对于我的简单示例应用程序,我将输入文件加载到结构中,然后将值发送到编辑字段:

代码语言:javascript
运行
复制
% 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中的文件将要求您选择应用程序,这对您的部署是有益的:

有几件事要考虑。

当应用程序从.exe打开时,它总是显示默认值。如果要输入其他默认值,可以编辑windows快捷方式目标字段,为所需输入文件提供文件路径(请参阅here)。这样可以使用新的默认值保存重新编译,但文件必须保留在某个位置(您也可以将其打包到应用程序中)。

对不起,这个回答太长了!希望能帮上忙!

票数 2
EN

Stack Overflow用户

发布于 2018-08-03 12:41:29

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51664266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档