【问题标题】:Parsing terminal arguments Qt Mac OS X解析终端参数 Qt Mac OS X
【发布时间】: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 打开文件时失败。

我错过了什么?

提前谢谢你。

【问题讨论】:

    标签: c++ macos qt terminal


    【解决方案1】:

    首先,您必须链接到 OX-X 框架。 OSX 使用类似于信号槽的事件。文件名也将由苹果事件给出。很久以前,我用另一种语言遇到过这个问题,但我仍然找到了参考:

    现在在 Qt 存档中编辑文档: https://doc.qt.io/archives/qq/qq12-mac-events.html

    【讨论】:

    • @AlexSpataru 你能分享你的解决方案吗?谢谢
    • @Noitidart,我创建了一个要点,解释如何使用系统事件来打开文件(它也适用于大多数操作系统)。你可以查看here
    • @AlexSpataru,链接失效了,能不能刷新一下,谢谢
    • @roberto 当然,你可以找到 Gist here
    猜你喜欢
    • 2010-10-29
    • 2011-01-09
    • 2011-11-13
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 2013-07-17
    相关资源
    最近更新 更多