甚至 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
...