我们的应用程序是跨平台的,因此是用 Qt 编写的。目标平台是 Windows 和 Mac。在我们的项目中,我们需要为一个单独的进程确定所有打开文件的列表。目前,我们使用 WinAPI 和相应的 Mac OsX API 以依赖于平台的方式进行。只要我们需要维护两个不相关的程序版本,这种做法就已经造成了很多问题。
如果有任何帮助,我们需要为 Traktor 和 Serato(Dj Intro 和 Scratch Live)等程序确定打开的音频文件列表。而我们使用的Qt版本是4.8.0。
那么,问题就来了,是否有任何平台无关的方法来获取已打开文件的列表?或者至少是使用某些第三方库或实用程序的某种解决方法?
最佳答案
甚至 Qt 也不是平台独立的 ;) 它只是将平台细节(如 WIN32 API 与 X11 API)封装在一个通用 API 下。在你的情况下我也会这样做:设计一个(基于 Qt 的)类,它提供你在你的应用程序中需要的 API,然后使用你已经存在的(特定于平台的)代码来提供你需要的功能。在您的应用程序中,您将只使用基于 Qt 的 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
...
关于c++ - 有没有办法获取使用 Qt 的进程的所有打开文件的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12475132/