首页 > 解决方案 > Qt5.14 找不到“windows.h”头文件?

问题描述

我在 Linux Fedora fc31_x86_64 上使用 Qt5.14。我正在阅读 Guillaume Lazar 的书“Mastering 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; 
} 

标签: c++windowsqt5

解决方案


这是我的错,因为我在阅读整个程序之前匆忙编译程序。在练习结束时,他使用条件编译,所以如果它在 Windows 上,它使用<windows.h>.

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

  • 正如@MM 所说,如果我注释掉与 Mac-Os 和 Windows 相关的部分,它适用于我在 Linux 上。但是整个程序是一个跨平台的,它使用条件编译来检测Qt在预编译步骤中运行的操作系统。

推荐阅读