我有一个 Qt 小部件,它充当我正在运行的外部进程的 GUI,并且我在代码中手动设置了该可执行文件的路径。但是,我想允许用户从 GUI 指定可执行文件的路径。
我的想法是有一些行编辑框,用户可以在其中输入路径,输入路径后,它将路径保存到名为
program_path
的变量中。这样,当我使用此变量调用进程时,它允许用户选择要运行的可执行文件。
我该如何实施?使用哪些 Qt 类?
为了允许用户选择文件或存储库,我建议使用 QFileDialog 类(http://doc.qt.io/qt-5/qfiledialog.html#details)。非常方便。
代码应如下所示:
QFileDialog *_DialogWindow = new QFileDialog(this); // Creates a dialog window.
bool result = _DialogWindow->exec(); // Window opens. User select something in his file system. Instructions returns only once he's done.
if( result ) {
_exePath = _DialogWindow->selectedFiles().first() ; // Get the path that was selected
}
您可能需要在 QFileDialog 对象上设置一些标志,以指定应选择哪种文件(在您的情况下为 .exe)
可以使用QInputdialog,使用时要小心
确保包含相关目录。
请小心使用 如果没有遇到类型错误,请验证您是否使用了相关目录
使用 Qtdocs 获取更多参考
你的想法不切实际外部进程的GUI ...我想允许用户指定可执行文件的路径。 如果您以这种方式使用应用程序,那么您应该预料到会遇到麻烦。因为给用户太多的程序控制权是不好的..
QProcess
可用于运行外部应用程序,但您需要在代码内部进行控制..不同的可执行文件以不同的方式运行(有些是命令行,有些是 GUI ...等)并采用不同的输入(有些可执行文件无需用户输入或切换即可运行,有些需要命令行参数...等)并且它们的输出不同(有些应用程序需要权限,它们以不同的方式给出结果)。
其次,用户通常对最终结果感兴趣,而不记得许多可执行文件的名称和使用它的细节。
实际上,提供使用请求选择列表(每个请求对应一个可执行文件)可能更合适,同时隐藏在代码中调用每个进程的详细信息。
为此,您需要一个
QComboBox
来向用户显示他们拥有哪些选项,并根据用户选择运行完成操作所需的 QProcess
。
毕竟,从
QLineEdit
或 QCombobox
获取字符串非常简单:
QString action = QLinedit::text();
QString action = QComboBox::currentText();
您可能还需要展示另一个基于初始用户选择的选择过程,该过程需要用户更多的输入并最终构建您的
QProccess
包含用户提供的所有详细信息。