【发布时间】:2013-07-07 22:08:32
【问题描述】:
我有一个简单的文本编辑器,我想在系统文件管理器中双击文件时打开它。
我在 Ubuntu Linux (13.04) 下成功地做到了这一点,但在 Mac OS X 中我的代码不起作用。
经过一番研究,我发现您需要在终端中添加--args参数才能将参数解析为main()。
我修复了我的代码,现在我的应用程序包可以从终端打开文件,但是当我在 Finder 中双击一个文件(并选择我的应用程序)时,我的应用程序启动时好像没有收到任何终端参数(创建一个新的文件)。
这是main()函数的代码:
int main(int argc, char *argv[])
{
QApplication MyApp(argc, argv);
Textpad.setApplicationName("MyApp");
Textpad.setApplicationVersion("0.7.2");
Textpad.setWindowIcon(QIcon(":/app-icon/48x48/icon.png"));
MainWindow *Window = new MainWindow();
QString Arguments;
QString FileLocation;
if (argc != 1) {
int i;
for (i = 0; i < argc; i++)
Arguments = argv[i];
// Check if the OS is Mac OS X (Mac OS X is 3)
if (Window->CheckOS() == 3)
// Remove the "--args" so that we don't confuse it with the file location
Arguments.replace("--args", "");
if (Arguments == "--help") {
// Show help
}
// Create a new file when Textpad is launched normally (under Linux)
if (Arguments == "%U") {
FileLocation.clear();
// Load settings and create UI
Window->Initialize();
// Open the requested file
Window->LoadFile(FileLocation);
}
else {
FileLocation = Arguments;
// Load settings and create UI
Window->Initialize();
// Open the requested file
Window->LoadFile(FileLocation);
}
}
else {
// Create new file
FileLocation.clear();
// Load settings and create UI
Window->Initialize();
// Open the requested file
Window->LoadFile(FileLocation);
}
return MyApp.exec();
}
正如我之前所说,当我编写以下代码时,我的应用程序会从终端毫无问题地打开文件:
open MyApp.app --args <location of my file>
但是当我尝试从 Finder 打开文件时失败。
我错过了什么?
提前谢谢你。
【问题讨论】: