【Qt】Qt获取操作系统和网络信息示例

😏*★,°* :.☆( ̄▽ ̄)/$:.°★ 😏

这篇文章主要介绍Qt获取操作系统和网络信息示例。
学其所用,用其所学。------梁启超

欢迎来到我的博客,一起学习,共同进步。

喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • [:smirk:1. 环境准备](#:smirk:1. 环境准备)
    • [:blush:2. UI绘制](#:blush:2. UI绘制)
    • [:satisfied:3. 代码示例](#:satisfied:3. 代码示例)

😏1. 环境准备

这里用Qt5.12,新建工程,实现获取操作系统信息、时间信息、网络信息和系统启动项

bash 复制代码
QT       += core gui network

😊2. UI绘制

用了textbrowserlabel

😆3. 代码示例

cpp 复制代码
// startupitems.h
#ifndef STARTUPITEMS_H
#define STARTUPITEMS_H

#include <QObject>
#include <QSettings>

class StartupItems : public QObject
{
    Q_OBJECT
public:
    explicit StartupItems(QObject *parent = nullptr);

    // 获取系统启动项
    QStringList getStartupItems()
    {
        QSettings registry("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
        return registry.childKeys();
    }

    // 添加启动项
    void addStartupItem(const QString& itemName, const QString& itemPath)
    {
        QSettings registry("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
        registry.setValue(itemName, itemPath);
    }

    // 删除启动项
    void removeStartupItem(const QString& itemName)
    {
        QSettings registry("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
        registry.remove(itemName);
    }

signals:

public slots:
};

#endif // STARTUPITEMS_H
cpp 复制代码
// startupitems.cpp
#include "startupitems.h"

StartupItems::StartupItems(QObject *parent) : QObject(parent)
{
	// 可扩展实现
}
cpp 复制代码
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QProcess>
#include <QTextCodec>
#include <QRegularExpression>
#include <QSysInfo>
#include <QDebug>
#include <QHostInfo>
#include <QNetworkInterface>
#include <QSettings>
#include <QDateTime>
#include <QLocale>
#include "startupitems.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void getSystemInfo();

    void getNetworkInfo();

    void setStartupItems();

    void getDateTimeInfo();

private slots:


private:
    Ui::MainWindow *ui;

    StartupItems *startup;
};

#endif // MAINWINDOW_H
cpp 复制代码
// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    getSystemInfo();

    getNetworkInfo();

    startup = new StartupItems();

    setStartupItems();

    getDateTimeInfo();

}

MainWindow::~MainWindow()
{
    delete ui;
    delete startup;
}

void MainWindow::getSystemInfo()
{
    QString systemInfo = "";

    // 获取操作系统版本信息
    QString osVersion = QSysInfo::prettyProductName();
    systemInfo.append("操作系统版本:" + osVersion + "\n");

    // 获取计算机主机名
    QString hostName = QSysInfo::machineHostName();
    systemInfo.append("计算机主机名:" + hostName + "\n");

    // 获取处理器架构
    QString cpuArchitecture = QSysInfo::currentCpuArchitecture();
    systemInfo.append("处理器架构:" + cpuArchitecture + "\n");

    // 获取主机信息
    QString nativeEndian;
    if (QSysInfo::ByteOrder == QSysInfo::BigEndian) {
        nativeEndian = "Big Endian";
    } else {
        nativeEndian = "Little Endian";
    }
    systemInfo.append("本机字节顺序:" + nativeEndian);

    ui->tb_sys->setPlainText(systemInfo);
}

void MainWindow::getNetworkInfo()
{
    QString networkInfo = "";

    // 获取主机的 IP 地址列表
    QString hostName = QHostInfo::localHostName();
    QList<QHostAddress> ipAddresses = QHostInfo::fromName(hostName).addresses();
    networkInfo.append("当前网络信息: \n");
    foreach (const QHostAddress &address, ipAddresses) {
        if (address.protocol() == QAbstractSocket::IPv4Protocol) {
            networkInfo.append("IPv4: " + address.toString() + "\n");
        } else if (address.protocol() == QAbstractSocket::IPv6Protocol) {
            networkInfo.append("IPv6: " + address.toString() + "\n");
        }
    }

//    // 获取网络接口列表
//    QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();
//    qDebug() << "网络接口列表:";
//    foreach (const QNetworkInterface &interface, interfaces) {
//        qDebug() << "名称:" << interface.name();
//        qDebug() << "硬件地址:" << interface.hardwareAddress();
//        qDebug() << "IP 地址列表:";
//        foreach (const QNetworkAddressEntry &entry, interface.addressEntries()) {
//            qDebug() << entry.ip().toString();
//        }
//        qDebug() << "-----------------------";
//    }

    ui->tb_net->setPlainText(networkInfo);
}

void MainWindow::setStartupItems()
{
    QString startupInfo = "";

    // 获取当前的启动项
    QStringList startupItems = startup->getStartupItems();
    startupInfo.append("当前的启动项:\n");
    for(const QString& item : startupItems)
    {
        startupInfo.append(item + "\n");
    }

    // 添加示例启动项
//    QString itemName = "Poe";
//    QString itemPath = "C:\\Path\\To\\MyApp.exe";
//    startup->addStartupItem(itemName, itemPath);
//    qDebug() << "添加启动项:" << itemName;

//    // 再次获取启动项,验证是否添加成功
//    startupItems = startup->getStartupItems();
//    qDebug() << "当前的启动项:";
//    for(const QString& item : startupItems)
//    {
//        qDebug() << item;
//    }

//    // 删除示例启动项
//    startup->removeStartupItem(itemName);
//    qDebug() << "删除启动项:" << itemName;

//    // 再次获取启动项,验证是否删除成功
//    startupItems = startup->getStartupItems();
//    qDebug() << "当前的启动项:";
//    for(const QString& item : startupItems)
//    {
//        qDebug() << item;
//    }

    ui->tb_start->setPlainText(startupInfo);
}

void MainWindow::getDateTimeInfo()
{
    QString datetimeInfo = "";

    // 获取当前日期和时间
    QDateTime currentDateTime = QDateTime::currentDateTime();
    QString currentDateTimeString = currentDateTime.toString(Qt::DefaultLocaleLongDate);
    datetimeInfo.append("当前日期和时间:" + currentDateTimeString + "\n");

    // 获取星期信息
    QString dayOfWeekString = currentDateTime.toString("dddd");
    datetimeInfo.append("星期:" + dayOfWeekString);

    ui->tb_time->setPlainText(datetimeInfo);
}

以上。

相关推荐
缺点内向20 小时前
告别“复制粘贴”:用C#和模板高效生成Word文档
开发语言·c#·word
edisao20 小时前
【开源】轻量级 LLM 文本质检工具:精准识别核心概念缺失,支持动态别名 + 反馈闭环
大数据·开发语言·人工智能·经验分享·gpt·架构·开源
进阶小白猿20 小时前
Java技术八股学习Day23
java·网络·学习
誰能久伴不乏20 小时前
Qt 线程为什么和 Linux pthread 不一样?事件循环、QObject 线程归属与串口上位机正确架构
linux·qt·架构
华硕之声20 小时前
试着像猫一样生活
网络·数据·华硕
上海云盾安全满满20 小时前
入侵防御系统与入侵检测系统的核心区别
网络·安全·web安全
Leweslyh20 小时前
【实战】如何在家定位国际空间站 (ISS)? —— 坐标转换的魔法 (例题 5.9)
开发语言·javascript·ecmascript
Sheep Shaun20 小时前
深入理解AVL树:从概念到完整C++实现详解
服务器·开发语言·数据结构·c++·后端·算法
_leoatliang20 小时前
基于Python的深度学习以及常用环境测试案例
linux·开发语言·人工智能·python·深度学习·算法·ubuntu
中议视控20 小时前
网络中央控制系统主机与音频综合管理平台的对接
网络·音视频