Qt5.14 找不到"windows.h"标题?



我在Linux Fedora fc31_x86_64上使用Qt5.14。我正在读纪尧姆·拉扎尔的书《掌握Qt5》。

在第2章中,我试图使用书中的示例来创建一个跨平台的桌面应用程序,该应用程序可以检索已使用的内存量和CPU负载。但是当我尝试在项目中包含windows.h时,编译器会抱怨找不到这个文件?

那么,如何在linux上的Qt5中包含"windows.h"呢?

这是书中的例子:

// In SysInfo.h
class SysInfo 
{ 
public: 
SysInfo(); 
virtual ~SysInfo(); 
virtual void init() = 0; 
virtual double cpuLoadAverage() = 0; 
virtual double memoryUsed() = 0; 
}; 
// In SysInfo.cpp 
#include "SysInfo.h" 
SysInfo::SysInfo() 
{ 
} 
SysInfo::~SysInfo() 
{ 
} 
#include "SysInfoWindowsImpl.h" 
#include <windows.h> 
SysInfoWindowsImpl::SysInfoWindowsImpl() : 
SysInfo()
{ 
} 
double SysInfoWindowsImpl::memoryUsed() 
{ 
MEMORYSTATUSEX memoryStatus; 
memoryStatus.dwLength = sizeof(MEMORYSTATUSEX); 
GlobalMemoryStatusEx(&memoryStatus); 
qulonglong memoryPhysicalUsed = 
memoryStatus.ullTotalPhys - memoryStatus.ullAvailPhys; 
return (double)memoryPhysicalUsed / 
(double)memoryStatus.ullTotalPhys * 100.0; 
} 

这很糟糕,因为我在阅读整个程序之前就匆忙编译了程序。在练习的最后,他使用条件编译,因此如果是在windows上,则使用<windows.h>

这本书应该在练习开始时提到这一点,或者告诉我们直到练习结束才编译练习。

  • 作为@M。M说,如果我评论掉与Mac Os和Windows相关的部分,它在Linux上对我有效。但整个程序是一个跨平台的程序,它使用条件编译来检测Qt在预编译步骤中运行的操作系统