Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有没有一种方法可以使用Qt获取进程所有打开文件的列表?_C++_Qt - Fatal编程技术网

C++ 有没有一种方法可以使用Qt获取进程所有打开文件的列表?

C++ 有没有一种方法可以使用Qt获取进程所有打开文件的列表?,c++,qt,C++,Qt,我们的应用程序是跨平台的,因此是用Qt编写的。目标平台是Windows和Mac。在我们的项目中,我们需要为一个单独的过程确定所有打开文件的列表。目前,我们使用WinAPI和相应的MacOSXAPI以依赖于平台的方式完成这项工作。只要我们需要维护两个不相关的程序版本,这种方法就已经造成了很多问题 如果有任何帮助,我们需要为Traktor和Serato(Dj Intro和Scratch Live)等节目确定一个打开的音频文件列表。我们使用的Qt版本是4.8.0 所以,问题是,有没有平台无关的方法来获

我们的应用程序是跨平台的,因此是用Qt编写的。目标平台是Windows和Mac。在我们的项目中,我们需要为一个单独的过程确定所有打开文件的列表。目前,我们使用WinAPI和相应的MacOSXAPI以依赖于平台的方式完成这项工作。只要我们需要维护两个不相关的程序版本,这种方法就已经造成了很多问题

如果有任何帮助,我们需要为Traktor和Serato(Dj Intro和Scratch Live)等节目确定一个打开的音频文件列表。我们使用的Qt版本是4.8.0


所以,问题是,有没有平台无关的方法来获取打开的文件列表?或者至少使用一些第三方库或UTIL的某种解决方法?

即使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();
}
QMySpecificAPI类:公共QObject{
Q_OBJECT//仅当需要信号/插槽时才需要
公众:
QList 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.h”
#如果你赢了
QList QMySpecificAPI::getOpenFiles(){
//使用WIN32 API检索文件列表
}
#恩迪夫
#ifdef Q_WS_MAC
QList QMySpecificAPI::getOpenFiles(){
//使用MACOSX API检索文件列表
}
#恩迪夫
特别是因为您说您的现有代码已经有很多问题,我强烈建议您实现单元测试用例,并定期运行它们来自动检查您的代码,如

...
QMySpecificAPI api;
QList<QString> fileList = api.getOpenFiles();
ASSERT(fileList.count() == 5);   // or whatever you expect
...
。。。
QMySpecificAPI;
QList fileList=api.getOpenFiles();
断言(fileList.count()==5);//或者随便你怎么想
...

一般-否(即使对于QT)。但您可能会找到一种适合您的特定情况的方法(仅适用于此特定程序)。@fork0不幸的是,这些程序(以及任何其他Dj软件AFAIK)都没有可用的公共API。我们已经在第一轮中调查了这个机会。是的,我们已经完全做到了,至少没有单元测试(:问题仍然是一样的-我希望有一种方法可以确保我的代码能够在所有平台上运行。我只有windows dev机器,无法在mac机器上立即测试我的更改。如果我使用Qt API,这对我来说将是一种花言巧语。