【qt】获取主机信息系统

话不多说,先一睹芳颜!

在这里插入图片描述

如果你也想达到这种效果,那咱们就开始吧!

目录

  • 一.登录界面设计
    • 1.ui登录设计
  • 二.加载界面
    • 1.lineEdit的密码输入模式
    • 2.lineEdit按回车跳转的信号
    • 3.密码的判断
    • 4.创建加载界面
    • 5.创建定时器来进行进度条的移动
    • 6.定时器执行的槽函数
  • 三.主机信息界面
    • 1.主机信息系统文字
    • 2.初始化按钮和布局
    • 3.对每个按钮进行手动关联
  • 四.实现相应槽函数功能
    • 1.主机名
    • 2.IPV4地址
    • 3.IPV6地址
    • 4.域名地址
    • 5.网卡地址
    • 6.网卡信息
  • 五.完整代码
  • 六.结语

一.登录界面设计

1.ui登录设计

在这里插入图片描述

可对Label标签进行居中显示.
在这里插入图片描述
也可以添加样式表,show出你的美.
在这里插入图片描述
label标签添加自定义大小的图片
在这里插入图片描述

二.加载界面

1.lineEdit的密码输入模式

在这里插入图片描述

输入的就是黑点,看不到真正的密码.

2.lineEdit按回车跳转的信号

在这里插入图片描述

3.密码的判断

在这里插入图片描述
如果密码错了,就继续输入,有三次机会,如果对了,就删除当前的界面.

4.创建加载界面

在这里插入图片描述

5.创建定时器来进行进度条的移动

在这里插入图片描述
当间隔时间一到,就会发出timeout信号,对槽函数**moveProgressBar()**进行执行!

6.定时器执行的槽函数

在这里插入图片描述
如果进度条的值加载到了一百,我们就跳转到主机信息的界面!
注意一定要将前面的布局删除,后面才能加新的布局.
因为我们在同一个窗口进行,所有后面的界面都是用代码来实现的.
要想显示就必须要加布局.

三.主机信息界面

1.主机信息系统文字

在这里插入图片描述
设置了渐变色,字体,居中,最小高度.

2.初始化按钮和布局

在这里插入图片描述

3.对每个按钮进行手动关联

在这里插入图片描述

四.实现相应槽函数功能

1.主机名

在这里插入图片描述

2.IPV4地址

在这里插入图片描述

3.IPV6地址

在这里插入图片描述

4.域名地址

在这里插入图片描述
在这里插入图片描述

5.网卡地址

在这里插入图片描述

6.网卡信息

在这里插入图片描述

五.完整代码

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QProgressBar>
#include <QLabel>
#include <QTimer>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLineEdit>
#include <QHostInfo>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_lineEditPwd_returnPressed();void onButtonHostName();void onButtonHostIPV4();void onButtonHostIPV6();void onButtonNameIP();void onButtonNetworkInterfaceIP();void onButtonNetworkInterfaceInfo();void nameIP(const QHostInfo &host);void moveProgressBar();private:Ui::Widget *ui;QProgressBar*progressBar;QLabel*loginLabel;QTimer*timer;QVBoxLayout *layout;QPushButton* buttonHostName;QPushButton* buttonHostIPV4;QPushButton* buttonHostIPV6;QPushButton* buttonNameIP;//域名QPushButton* buttonNetworkInterfaceIP;//网卡QPushButton* buttonNetworkInterfaceInfo;QLabel*lableName;QLineEdit*lineEdit;void initBackground();void initProgressBar();void initTimer();void initMenu();void initSignalSlots();};

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QStackedWidget>
#include <QMessageBox>
#include <QVBoxLayout>
#include <QLayout>
#include <QDebug>
#include <QHostInfo>
#include <QNetworkInterface>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->lineEditPwd->setEchoMode(QLineEdit::Password);initBackground();initTimer();
}Widget::~Widget()
{delete ui;
}void Widget::initBackground()
{this->setFixedWidth(566);this->setFixedHeight(366);QPixmap pixmap(":/images/tx.png");pixmap = pixmap.scaled(ui->labelImage->width(),ui->labelImage->height(), Qt::KeepAspectRatio, Qt::SmoothTransformation); // 保持宽高比ui->labelImage->setPixmap(pixmap);
}void Widget::initProgressBar()
{progressBar=new QProgressBar;progressBar->setValue(0);progressBar->setRange(0,100);loginLabel=new QLabel("正在登录中...");loginLabel->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);QFont font;font.setBold(true);font.setFamily("微软雅黑");font.setPointSize(30);loginLabel->setFont(font);layout = new QVBoxLayout;layout->addWidget(loginLabel);layout->addWidget(progressBar);// 将布局设置为窗口的布局setLayout(layout);
}void Widget::initTimer()
{timer=new QTimer;timer->setTimerType(Qt::CoarseTimer);timer->setInterval(50);connect(timer,SIGNAL(timeout()),this,SLOT(moveProgressBar()));
}void Widget::initMenu()
{lableName=new QLabel("主机信息系统");lableName->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);QFont font;font.setBold(true);font.setFamily("微软雅黑");font.setPointSize(30);lableName->setFont(font);lableName->setMinimumHeight(100);QLinearGradient gradient(0, 0, lableName->width(), lableName->height()); // 创建线性渐变,从左上角到右下角gradient.setColorAt(0, Qt::blue); // 设置渐变起始颜色gradient.setColorAt(1, Qt::green); // 设置渐变结束颜色QPalette palette;palette.setBrush(QPalette::WindowText, QBrush(gradient)); // 将渐变设置为标签文字的画刷lableName->setPalette(palette); // 设置标签的调色板buttonHostName=new QPushButton("查看主机名");buttonHostIPV4=new QPushButton("查看IPV4地址");buttonHostIPV6=new QPushButton("查看IPV6地址");lineEdit=new QLineEdit;lineEdit->setPlaceholderText("请输入域名");buttonNameIP=new QPushButton("查看域名IP地址");buttonNetworkInterfaceIP=new QPushButton("查看网卡IP");buttonNetworkInterfaceInfo =new QPushButton("查看网卡信息");QVBoxLayout *Vlayout=new QVBoxLayout;Vlayout->addWidget(buttonHostName);Vlayout->addWidget(buttonHostIPV4);Vlayout->addWidget(buttonHostIPV6);QVBoxLayout *Vlayout2=new QVBoxLayout;Vlayout2->addWidget(lineEdit);Vlayout2->addWidget(buttonNameIP);Vlayout2->addWidget(buttonNetworkInterfaceIP);Vlayout2->addWidget(buttonNetworkInterfaceInfo);QHBoxLayout *Hlayout=new QHBoxLayout;Hlayout->addLayout(Vlayout);Hlayout->addStretch();Hlayout->addLayout(Vlayout2);QVBoxLayout *Vlayout3=new QVBoxLayout;Vlayout3->addWidget(lableName);Vlayout3->addLayout(Hlayout);setLayout(Vlayout3);initSignalSlots();
}void Widget::initSignalSlots()
{connect(buttonHostName,SIGNAL(clicked()),this,SLOT(onButtonHostName()));connect(buttonHostIPV4,SIGNAL(clicked()),this,SLOT(onButtonHostIPV4()));connect(buttonHostIPV6,SIGNAL(clicked()),this,SLOT(onButtonHostIPV6()));connect(buttonNameIP,SIGNAL(clicked()),this,SLOT(onButtonNameIP()));connect(buttonNetworkInterfaceIP,SIGNAL(clicked()),this,SLOT(onButtonNetworkInterfaceIP()));connect(buttonNetworkInterfaceInfo,SIGNAL(clicked()),this,SLOT(onButtonNetworkInterfaceInfo()));
}void Widget::on_lineEditPwd_returnPressed()
{static int count=0;if(ui->lineEditPwd->text().trimmed()=="123456"){initProgressBar();timer->start();delete ui->groupBox;}else{if(++count>3){QMessageBox::warning(this,"警告","密码输入错误过多,直接退出程序!");this->close();}else{QMessageBox::information(this,"消息","密码输入错误,请重新输入!");}}
}void Widget::onButtonHostName()
{QString hostName=QHostInfo::localHostName();QMessageBox::information(this,"主机信息","您的主机名为:"+hostName);
}void Widget::onButtonHostIPV4()
{QHostInfo info=QHostInfo::fromName(QHostInfo::localHostName());QList<QHostAddress> list=info.addresses();//返回的不是指针if(!list.isEmpty()){QString str;for(int i=0;i<list.count();i++){QHostAddress address=list[i];if(address.protocol()==QAbstractSocket::IPv4Protocol){str+=address.toString()+"\n";}}QMessageBox::information(this,"主机信息","IPV4:\n"+str);}
}void Widget::onButtonHostIPV6()
{QHostInfo info=QHostInfo::fromName(QHostInfo::localHostName());QList<QHostAddress> list=info.addresses();//返回的不是指针if(!list.isEmpty()){QString str;for(int i=0;i<list.count();i++){QHostAddress address=list[i];if(address.protocol()==QAbstractSocket::IPv6Protocol){str+=address.toString()+"\n";}}QMessageBox::information(this,"主机信息","IPV6:\n"+str);}
}void Widget::onButtonNameIP()
{QString name=lineEdit->text().trimmed();if(name=="") return;QHostInfo::lookupHost(name,this,SLOT(nameIP(QHostInfo)));
}void Widget::onButtonNetworkInterfaceIP()
{QList<QHostAddress> list=QNetworkInterface::allAddresses();if(!list.isEmpty()){QString str;for(int i=0;i<list.count();i++){QHostAddress address=list[i];if(address.protocol()==QAbstractSocket::IPv4Protocol){str+=address.toString()+"\n";}}QMessageBox::information(this,"网卡信息","网卡的IPV4:\n"+str);}
}void Widget::onButtonNetworkInterfaceInfo()
{QList<QNetworkInterface> listInterface=QNetworkInterface::allInterfaces();if(!listInterface.isEmpty()){QString str;for(int i=0;i<listInterface.count();i++){QNetworkInterface interface=listInterface[i];str+="设备名称:"+interface.humanReadableName()+"\n";str+="硬件地址:"+interface.hardwareAddress()+"\n";QList<QNetworkAddressEntry> list=interface.addressEntries();if(!list.isEmpty()){for(int i=0;i<list.count();i++){QNetworkAddressEntry address=list[i];str+="子网掩码:"+address.netmask().toString()+"\n";str+="广播地址:"+address.broadcast().toString()+"\n";str+="IP地址:"+address.ip().toString()+"\n\n";}}}QMessageBox::information(this,"网卡信息",str);}}void Widget::nameIP(const QHostInfo &host)
{QList<QHostAddress> list=host.addresses();//返回的不是指针if(!list.isEmpty()){QString str;for(int i=0;i<list.count();i++){QHostAddress address=list[i];if(address.protocol()==QAbstractSocket::IPv6Protocol){str+=address.toString()+"\n";}}QString name=lineEdit->text().trimmed();QMessageBox::information(this,"域名信息",name+"的IPV6:\n"+str);}
}void Widget::moveProgressBar()
{static int value=0;progressBar->setValue(++value);if(value==100){timer->stop();QMessageBox::StandardButton ret=QMessageBox::information(this,"提示","登录成功!",QMessageBox::Ok,QMessageBox::NoButton);if(ret==QMessageBox::Ok){progressBar->hide();loginLabel->hide();delete layout;initMenu();}}
}

六.结语

少即是多,慢即是快

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/42991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解析java128陷阱

一、提要 在java开发时&#xff0c;由于基本类型不能调用方法&#xff0c;在某些方面很不方便&#xff0c;因此产生了包装类。我们把基本类型和对应的包装类的转换叫装箱、拆箱。 1.装箱 基本类型转成包装类对象 关键字valueOf->装箱,可以指定进制&#xff1a; Integer…

非参数检测5——双输入检测系统

在很多情况下&#xff0c;信号常常存在于两个带有独立噪声的信道中。所以很有必要研究双输入系统。双输入系统广泛应用于无线电天文学、水下声波检测和地球物理学等领域。

视频融合共享平台LntonCVS视频监控汇聚平台工业视频监控系统

LntonCVS是一款功能强大、灵活部署的安防视频监控平台&#xff0c;具备广泛的扩展性和视频能力。它支持多种主流标准协议&#xff0c;如国标GB28181、RTSP/Onvif、RTMP&#xff0c;同时还能兼容厂家的私有协议和SDK&#xff0c;如海康Ehome、海大宇等。除了传统的安防监控功能外…

HSG金属表面缺陷检测

HSG金属表面缺陷检测 1. 项目背景1.1 项目简述1.2 项目目标 2. 解决方案3. 数据集3.1 收集各种缺陷的图片3.2 利用有限图片创造更多可能3.3 分割图像3.4 打标签 4. 部分代码4.1 数据集划分4.2图像分割4.3 训练模型4.4 预测 5. 预测结果 1. 项目背景 1.1 项目简述 iPad HSG 的…

Qt json和xml操作

学习目标&#xff1a; 认识json和xml读写操作 前置环境 运行环境:qt creator 4.12 学习内容 XML XML&#xff08;Extensible Markup Language&#xff09;是一种标记语言,是一种用于描述数据结构的语言。它非常适合用于存储和传输数据。 XML 的主要特点如下: 可扩展性:XM…

数组算法(二):交替子数组计数

1. 官方描述 给你一个二进制数组nums 。如果一个子数组中 不存在 两个 相邻 元素的值 相同 的情况&#xff0c;我们称这样的子数组为 交替子数组 。 返回数组 nums 中交替子数组的数量。 示例 1&#xff1a; 输入&#xff1a; nums [0,1,1,1] 输出&#xff1a; 5 解释&#…

项目一单机安装基于LNMP结构的WordPress网站 web与数据库服务分离

网站的类型&#xff1a; Jave:LNMT PHP:LNMP Python: LNMU 项目部署&#xff1a; 1.项目的类型&#xff08;项目的开发语言&#xff09; 2.项目运营平台的技术选择 3.尽快让项目运行起来 all in one部署 4. 架构的优化 配置ansible管理环境 配置nginx 配置数据库服务…

leetcode:编程基础0到1

文章目录 交替合并字符串str.length();StringBuilder类型 ,toString()append() &#xff0c;chatAt()题目描述 交替合并字符串 str.length(); 输出字符串str的长度 StringBuilder类型 ,toString() append() &#xff0c;chatAt() 题目描述 class Solution {public String …

python获取文件列表按照文件修改时间进行排序,默认按照文件名时间戳排序

python获取文件列表按照文件修改时间进行排序,默认按照文件名时间戳排序 1、流程 1、获取文件绝对路径下的所有文件 2、通过os.path.getmtime获取每个文件的修改时间,并与文件组成元组,方便后续排序 3、默认按照时间戳降序,否则按照按修改时间排序文件列表(从最晚到最早)…

开个技术外挂|用技术轻松实现GPU显卡冷却风扇噪声控制

GPU显卡冷却风扇噪声分析 游戏玩家可能有这样的体验&#xff1a;当显卡卖力工作的时候&#xff0c;明显感觉到从机箱传来的噪声变大了。这是因为系统监测到芯片有过热风险&#xff0c;从而自动提升了冷却风扇的转速。 如下图所示&#xff0c;当GPU显卡处于 20C 时&#xff0c;风…

212.贪心算法:跳跃游戏(力扣)

代码解决 class Solution { public:bool canJump(vector<int>& nums) {int cover 0; // 初始化覆盖范围if (nums.size() 1) return true; // 如果数组长度为1&#xff0c;直接返回 true// 遍历数组&#xff0c;直到当前覆盖范围for (int i 0; i < cover; i…

【易捷海购-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

【活动行】参与上海两场线下活动,教育生态行业赛总决赛活动和WAIC人工智能大会活动 - 上海活动总结

目录 背景决赛最后一公里领域范围 决赛作品AI智教相机辅导老师Copilot辅导老师Copilot雅思写作竞技场 优秀作品总结 背景 决赛 百度发起的千帆杯教育生态行业赛于2024年7月4日进行线下决赛&#xff0c;博主虽然没能进入决赛&#xff0c;但也非常荣幸能够以嘉宾身份到现场给进…

【VUE基础】VUE3第四节—核心语法之computed、watch、watcheffect

computed 接受一个 getter 函数&#xff0c;返回一个只读的响应式 ref 对象。该 ref 通过 .value 暴露 getter 函数的返回值。它也可以接受一个带有 get 和 set 函数的对象来创建一个可写的 ref 对象。 创建一个只读的计算属性 ref&#xff1a; <template><div cl…

<PLC><汇川><串口485>汇川Eazy521系列PLC与特域水冷机进行485通讯的设置

前言 本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。 PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。 除了PLC为主要内容外,PLC相关元器件如触摸屏(HMI)、交换机等工控产品,如…

【前端界面分享】

实现效果&#xff1a;html源码来自b站up主&#xff1a;【CSSJS】甲方&#xff1a;啊&#xff1f;没叫你做那么超前啊_哔哩哔哩_bilibili 本人仅实现了将html格式改为vue3 html版&#xff1a; 对于前端连入门可能都没摸到&#xff0c;学了半天也就改成vue3了&#xff0c;对于输…

【ARM系列】1 of N SPI

1 of N模式 SPI 概述配置流程 概述 GIC-600AE支持1 of N模式SPI。在此模式下可以将SPI target到多个core&#xff0c;并且GIC-600AE可以选择哪些内核接收SPI。 GIC-600AE只向处于powered up 并且使能中断组的core发送SPI。 GIC-600AE会优先考虑那些被认为是active的核&#xf…

SQL注入基础入门

文章目录 前言SQL注入基本操作SQL注入类型分类数字型字符型搜索型xx型Json型数据类型提交的方式 SQL注入的位置分类报错注入报错注入实战案例 SQL注入语句分类insert注入update注入delete注入 编码Tips&#xff1a;Mysql版本区别information_schema数据库详解 其他注入手段宽字…

面试官:Java线程可以无限创建吗?

1. 面试连环call Java线程可以无限创建吗? Java线程和操作系统线程有什么关联? 操作系统为什么要区分内核态和用户态? ⏩要想解答这些问题&#xff0c;我们要先从操作系统线程开始说起&#xff0c;让我们开始吧&#x1f389;&#x1f389;&#x1f389; 2. 操作系统线程…

为什么要学习Go

本文旨在探讨为什么Go语言值得学习,以及它如何能够提升您的编程技能和职业发展。我们将深入分析Go语言的核心优势,包括其简洁的语法、强大的并发支持、卓越的性能表现,以及在云计算、微服务和系统编程等领域的广泛应用 GO logo的核心理念&#xff0c;即简单胜于复杂。使用现代…