【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.rhkb.cn/news/372218.html

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

相关文章

HarmonyOS Next系列之Echarts图表组件(折线图、柱状图、饼图等)实现(八)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…

2-28 基于matlab提取出频域和时域信号的29个特征

基于matlab提取出频域和时域信号的29个特征&#xff0c;主运行文件feature_extraction&#xff0c;fre_statistical_compute和time_statistical_compute分别提取频域和时域的特征&#xff0c;生成的29个特征保存在生成的feature矩阵中。程序已调通&#xff0c;可直接运行。 2-2…

初学嵌入式是弄linux还是单片机?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;1、先入门了51先学了89c52…

绝地求生PUBG没有开始游戏按钮的解决办法

绝地求生是一款特别热门的战术竞技型射击类游戏&#xff0c;游戏中玩家需要在游戏地图上收集各种资源&#xff0c;并在不断缩小的安全区域内持武器对抗其他玩家&#xff0c;让自己生存到最后。当游戏最后场上只剩下一支队伍的时候即可获得游戏胜利。然而一些玩家在游玩绝地求生…

@react-google-maps/api实现谷歌地图中添加多边围栏,并可编辑,编辑后可获得围栏各个点的经纬度

先上一张效果图 看看是不是大家想要的效果&#xff5e; ❤️ 由于该功能微微复杂一点&#xff0c;为了让大家精准了解 我精简了一下地图代码 大家根据自己的需求将center值和paths&#xff0c;用setState做活就可以了 1.第一步要加入项目package.json中或者直接yarn install它…

Powershell 获取电脑保存的所有wifi密码

一. 知识点 netsh wlan show profiles 用于显示计算机上已保存的无线网络配置文件 Measure-Object 用于统计数量 [PSCustomObject]{ } 用于创建Powershell对象 [math]::Round 四舍五入 Write-Progress 显示进度条 二. 代码 只能获取中文Windows操作系统的wifi密码如果想获取…

论文解析——Full Stack Optimization of Transformer Inference: a Survey

作者及发刊详情 摘要 正文 主要工作贡献 这篇文章的贡献主要有两部分&#xff1a; 分析Transformer的特征&#xff0c;调查高效transformer推理的方法通过应用方法学展现一个DNN加速器生成器Gemmini的case研究 1&#xff09;分析和解析Transformer架构的运行时特性和瓶颈…

Java进阶----继承

继承 一.继承概述 继承是可以通过定义新的类&#xff0c;在已有类的基础上扩展属性和功能的一种技术. 案例&#xff1a;优化 猫、狗JavaBean类的设计 狗类&#xff1a;Dog 属性&#xff1a;名字 name&#xff0c;年龄 age 方法&#xff1a;看家 watchHome()&#xff0c;Gett…

防火墙基础及登录(华为)

目录 防火墙概述防火墙发展进程包过滤防火墙代理防火墙状态检测防火墙UTM下一代防火墙&#xff08;NGFW&#xff09; 防火墙分类按物理特性划分软件防火墙硬件防火墙 按性能划分百兆级别和千兆级别 按防火墙结构划分单一主机防火墙路由集成式防火墙分布式防火墙 华为防火墙利用…

命令行运行git reflog(reference log)报错的解决办法

文章目录 1. 检查 Git 是否已安装2. 检查 PATH 环境变量3. 重新安装 Git 在Git中&#xff0c; reflog的英文全称是 “ reference log”。意思是 引用日志&#xff08;参考日志&#xff09;。它记录了本地仓库中HEAD和分支引用所指向的提交的变更历史。这包括了你所有的提交&…

推荐3款免费电脑工具

Tools-Web Tools-Web是一个在线工具箱&#xff0c;提供丰富的工具和功能&#xff0c;适用于日常工作和学习。根据用户评价&#xff0c;Tools-Web的工具种类丰富且操作简单&#xff0c;是日常工作和学习的好帮手。该工具箱涵盖了开发运维、文本处理、图片处理、图表处理、随机工…

收银系统源码-收银台副屏广告

1. 功能描述 门店广告&#xff1a;双屏收银机&#xff0c;副屏广告&#xff0c;主屏和副屏同步&#xff0c;总部可统一控制广告位&#xff0c;也可以给门店开放权限&#xff0c;门店独立上传广告位&#xff1b; 2.适用场景 新店开业、门店周年庆、节假日门店活动宣传&#x…

2通道音频ADC解码芯片ES7243L、ES7243E、ES7243,用于低成本实现模拟麦克风转换为IIS数字话筒

前言&#xff1a; 音频解码芯片某创参考价格&#xff1a; ES7243L 500&#xff1a;&#xffe5;1.36 / 个 ES7243E 500&#xff1a;&#xffe5;1.66 / 个 ES7243 500&#xff1a; &#xffe5;1.91 / 个 其中ES7243L工作电压为1.8V&#xff0c;与其他两款的3.3V工作电压不同&…

九科bit-Worker RPA 内容学习

简介&#xff1a; 什么是RPA&#xff1f; RPA&#xff08;Robotic Process Automation&#xff0c;机器人流程自动化&#xff09;本质上是一种“AI数字员工”&#xff0c;针对企业中存在的大批量、重复性、机械化人工操作&#xff0c;通过模拟人的工作流程使之实现自动化。 b…

Redhat 安装 docker 网络连接超时问题

目录 添加阿里云的Docker CE仓库 更新YUM缓存 安装 Docker Engine 启动并设置Docker自启动 验证 Docker 安装 [userlocalhost ~]$ sudo yum-config-manager --add-repohttps://download.docker.com/linux/centos/docker-ce.repo 正在更新 Subscription Management 软件仓库…

c++之命名空间详解(namespace)

引例 在学习之前我们首先了来看这样一个情形: 在c语言下&#xff0c;我们写了两个头文件&#xff1a;链表和顺序表的。我们会定义一个type(typedef int type)方便改变数据类型&#xff08;比如将int改成char&#xff09;&#xff0c;来做到整体代换。 但是我们两个头文件里面…

运维锅总详解系统设计原则

本文对CAP、BASE、ACID、SOLID 原则、12-Factor 应用方法论等12种系统设计原则进行分析举例&#xff0c;希望对您在进行系统设计、理解系统运行背后遵循的原理有所帮助&#xff01; 一、CAP、BASE、ACID简介 以下是 ACID、CAP 和 BASE 系统设计原则的详细说明及其应用举例&am…

98.验证二叉搜索树——二叉树专题复习

递归&#xff1a; class Solution {// 判断二叉搜索树是否有效public boolean isValidBST(TreeNode root) {// 递归地检查以 root 为根的子树是否满足 BST 的性质// 同时定义一个范围 [Long.MIN_VALUE, Long.MAX_VALUE] 来约束节点的值return isValidBST(root, Long.MIN_VALUE…

SpringBoot拦截器

目录 一、拦截器快速入门 &#xff08;1&#xff09;什么是拦截器 &#xff08;2&#xff09;拦截器的使用步骤 1、定义拦截器 &#x1f340;preHandle() 方法 &#x1f340;postHandle() 方法 &#x1f340;afterCompletion() 方法 2、注册配置拦截器 二、拦截器详解…

中国剩余定理

模板代码&#xff1a; #include<bits/stdc.h> using namespace std; using ll long long; #define fi first #define se second const ll mod998244353; const int N2e510; #define int llint n,m[300],r[300]; int exgcd(int a,int b,int &x,int &y){if(b0){x…