我在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在预编译步骤中运行的操作系统