2

私たちのアプリケーションはクロスプラットフォームであるため、Qt で記述されています。対象プラットフォームは Windows と Mac です。私たちのプロジェクトでは、別のプロセスのために開いているすべてのファイルのリストを決定する必要があります。今のところ、WinAPI と対応する Mac OsX API を使用して、プラットフォームに依存する方法でそれを行います。プログラムの 2 つの無関係なバージョンを維持する必要がある限り、このアプローチはすでに多くの問題を引き起こしています。

役立つ場合は、Traktor や Serato (Dj Intro および Scratch Live) などのプログラムで開かれているオーディオ ファイルのリストを特定する必要があります。また、使用している Qt のバージョンは 4.8.0 です。

それで、質問は、開いているファイルのリストを取得するプラットフォームに依存しない方法はありますか? それとも、少なくともサードパーティのライブラリやユーティリティを使用した何らかの回避策でしょうか?

4

1 に答える 1

1

Qt でさえ、プラットフォームに依存しません ;) 共通の API の下で、プラットフォームの仕様 (WIN32 API と X11 API など) をカプセル化するだけです。あなたの場合も同じです。アプリケーションで必要な API を提供する (Qt ベースの) クラスを設計し、既存の (プラットフォーム固有の) コードを使用して必要な機能を提供します。アプリケーションでは、Qt ベースの API のみを使用し、アプリケーション コードでプラットフォームの仕様について心配する必要はありません。また、API に対して任意の数の単体テストを記述して、API が正しく動作することを確認できます。

例 (100% 完全なコードではありません!):

ヘッダー ファイルで:

class QMySpecificAPI : public QObject {
    Q_OBJECT    // only required when you need signals/slots

public:
    QList<QString> getOpenFiles();
}

あなたのcppファイルで:

#include "QMySpecificAPI.h"

#ifdef Q_WS_WIN
QList<QString> QMySpecificAPI::getOpenFiles() {
   // Use WIN32 API to retrieve the file list
}
#endif

#ifdef Q_WS_MAC
QList<QString> QMySpecificAPI::getOpenFiles() {
    // Use MACOSX API to retrieve the file list
}
#endif

特に、既存のコードにすでに多くの問題があるとおっしゃっているので、単体テスト ケースを実装し、定期的に実行してコードを自動的にチェックすることを強くお勧めします。

...
QMySpecificAPI api;
QList<QString> fileList = api.getOpenFiles();
ASSERT(fileList.count() == 5);   // or whatever you expect
...
于 2012-09-18T11:24:52.847 に答える