1

システム ファイル マネージャーからダブルクリックしたときにファイルを開きたい単純なテキスト エディターがあります。

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 からファイルを開こうとすると失敗します。

私は何が欠けていますか?

前もって感謝します。

4

1 に答える 1

1

まず、OX-X フレームワークにリンクする必要があります。OSX は、シグナル スロットに似たイベントで動作します。ファイル名は、Apple イベントによっても指定されます。私はかなり前に別の言語でこれを持っていましたが、まだ参照を見つけました:

Qt アーカイブで今すぐドキュメントを編集: https://doc.qt.io/archives/qq/qq12-mac-events.html

于 2013-07-10T05:50:06.360 に答える