Qt 获取Windows内存信息

                      欢迎关注公众号可以查看更多完整文章

 

通过调用Windows API来获取Windows 内存信息,并显示在界面上,通过与Windows 内存管理器对比可以看到结果是正确的。

实现的小工具的界面效果与内存管理器对比如下:

实现的完整代码:

#pragma execution_character_set("utf-8")
#ifndef QMEMORYINFO_H
#define QMEMORYINFO_H

#include <QtWidgets/QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QTimer>

class QMemoryInfo : public QWidget
{
	Q_OBJECT

public:
	QMemoryInfo(QWidget *parent = 0);
	~QMemoryInfo();

private:
	void updateInfo();

	QTimer *m_timer;

	QLabel *m_memoryUsedLabel;
	QLabel *m_totalPhysLabel;
	QLabel *m_availPhysLabel;
	QLabel *m_totalPageFileLabel;
	QLabel *m_availPageFileLabel;
	QLabel *m_totalVirtualLabel;
	QLabel *m_availVirtualLabel;
	QLabel *m_availExVirtualLabel;

	QLineEdit *m_memoryUsedEdit;
	QLineEdit *m_totalPhysEdit;
	QLineEdit *m_availPhysEdit;
	QLineEdit *m_totalPageFileEdit;
	QLineEdit *m_availPageFileEdit;
	QLineEdit *m_totalVirtualEdit;
	QLineEdit *m_availVirtualEdit;
	QLineEdit *m_availExVirtualEdit;
};

#endif // QMEMORYINFO_H
#include "qmemoryinfo.h"
#include <QGridLayout>
#include <windows.h>
#include <sysinfoapi.h>

QMemoryInfo::QMemoryInfo(QWidget *parent)
	: QWidget(parent)
{
	m_memoryUsedLabel = new QLabel(this);
	m_totalPhysLabel = new QLabel(this);
	m_availPhysLabel = new QLabel(this);
	m_totalPageFileLabel = new QLabel(this);
	m_availPageFileLabel = new QLabel(this);
	m_totalVirtualLabel = new QLabel(this);
	m_availVirtualLabel = new QLabel(this);
	m_availExVirtualLabel = new QLabel(this);

	m_memoryUsedEdit = new QLineEdit(this);
	m_totalPhysEdit = new QLineEdit(this);
	m_availPhysEdit = new QLineEdit(this);
	m_totalPageFileEdit = new QLineEdit(this);
	m_availPageFileEdit = new QLineEdit(this);
	m_totalVirtualEdit = new QLineEdit(this);
	m_availVirtualEdit = new QLineEdit(this);
	m_availExVirtualEdit = new QLineEdit(this);

	m_memoryUsedLabel->setText(QObject::tr("内存使用率:"));
	m_totalPhysLabel->setText("总物理内存:");
	m_availPhysLabel->setText("可用物理内存:");
	m_totalPageFileLabel->setText("系统提交总数:");
	m_availPageFileLabel->setText("系统提交数:");
	m_totalVirtualLabel->setText("总虚拟内存:");
	m_availVirtualLabel->setText("可用虚拟内存:");
	m_availExVirtualLabel->setText("可用扩展虚拟:");

	m_memoryUsedEdit->setReadOnly(true);
	m_totalPhysEdit->setReadOnly(true);
	m_availPhysEdit->setReadOnly(true);
	m_totalPageFileEdit->setReadOnly(true);
	m_availPageFileEdit->setReadOnly(true);
	m_totalVirtualEdit->setReadOnly(true);
	m_availVirtualEdit->setReadOnly(true);
	m_availExVirtualEdit->setReadOnly(true);

	QGridLayout *pLay = new QGridLayout(this);
	int iLine = 0;
	pLay->addWidget(m_memoryUsedLabel, iLine, 0, 1, 1);
	pLay->addWidget(m_memoryUsedEdit, iLine, 1, 1, 3);
	iLine++;
	pLay->addWidget(m_totalPhysLabel, iLine, 0, 1, 1);
	pLay->addWidget(m_totalPhysEdit, iLine, 1, 1, 3);
	iLine++;
	pLay->addWidget(m_availPhysLabel, iLine, 0, 1, 1);
	pLay->addWidget(m_availPhysEdit, iLine, 1, 1, 3);
	iLine++;
	pLay->addWidget(m_totalPageFileLabel, iLine, 0, 1, 1);
	pLay->addWidget(m_totalPageFileEdit, iLine, 1, 1, 3);
	iLine++;
	pLay->addWidget(m_availPageFileLabel, iLine, 0, 1, 1);
	pLay->addWidget(m_availPageFileEdit, iLine, 1, 1, 3);
	iLine++;
	pLay->addWidget(m_totalVirtualLabel, iLine, 0, 1, 1);
	pLay->addWidget(m_totalVirtualEdit, iLine, 1, 1, 3);
	iLine++;
	pLay->addWidget(m_availVirtualLabel, iLine, 0, 1, 1);
	pLay->addWidget(m_availVirtualEdit, iLine, 1, 1, 3);
	iLine++;
	pLay->addWidget(m_availExVirtualLabel, iLine, 0, 1, 1);
	pLay->addWidget(m_availExVirtualEdit, iLine, 1, 1, 3);

	m_timer = new QTimer(this);
	connect(m_timer, &QTimer::timeout, this, &QMemoryInfo::updateInfo);
	m_timer->start(100);
}

QMemoryInfo::~QMemoryInfo()
{

}

void QMemoryInfo::updateInfo()
{
	MEMORYSTATUSEX memoryInfo;
	memoryInfo.dwLength = sizeof(memoryInfo);
	GlobalMemoryStatusEx(&memoryInfo);

	UINT mb = 1024 * 1024;
	m_memoryUsedEdit->setText(QString::number(memoryInfo.dwMemoryLoad).append("%"));
	m_totalPhysEdit->setText(QString::number(memoryInfo.ullTotalPhys / mb));
	m_availPhysEdit->setText(QString::number(memoryInfo.ullAvailPhys / mb));
	m_totalPageFileEdit->setText(QString::number(memoryInfo.ullTotalPageFile / mb));
	m_availPageFileEdit->setText(QString::number(memoryInfo.ullTotalPageFile / mb - memoryInfo.ullAvailPageFile / mb));
	m_totalVirtualEdit->setText(QString::number(memoryInfo.ullTotalVirtual / mb));
	m_availVirtualEdit->setText(QString::number(memoryInfo.ullAvailVirtual / mb));
	m_availExVirtualEdit->setText(QString::number(memoryInfo.ullAvailExtendedVirtual / mb));
	update();
}

交流qq:1245178753

本文地址:Qt 获取Windows内存信息_GreenArrowMan-CSDN博客-CSDN博客

源码下载:Qt获取Windows内存信息_qt获取内存,qt查看内存-C++代码类资源-CSDN下载

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GreenArrowMan

请打钱~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值