【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.xdnf.cn/news/1474984.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

阶段三:项目开发---大数据开发运行环境搭建:任务3:安装配置Hadoop集群

任务描述 知识点&#xff1a;安装配置Hadoop 重 点&#xff1a; 安装配置Hadoop 难 点&#xff1a;无 内 容&#xff1a; Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下&#xff0c;开发分布式程序。充分利用集群的威…

深度卷积神经网络 AlexNet

一、机器学习深度学习的发展 1、机器学习SVM方法 &#xff08;1&#xff09;20世纪90年代&#xff0c;基于统计学习理论的结果&#xff0c;开发了一种新型的学习算法——支持向量机&#xff08;SVM&#xff09;。这就产生了一类新的理论上优雅的学习机器&#xff0c;它们将SVM…

【智能算法应用】灰狼算法求解二维栅格路径规划问题

目录 1.算法原理2.二维路径规划数学模型3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】灰狼算法&#xff08;GWO&#xff09;原理及实现 2.二维路径规划数学模型 栅格法模型最早由 W.E. Howden 于 1968 年提出&#xff0c;障碍物的栅格用黑色表示&#xff0c;可通…

【数据结构与算法】详解二叉树下:实践篇————通过链式结构深入理解并实现二叉树

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​ 目录 一、二叉树前置知识 二、二叉树链式结构实现的结构定义 三、二叉树的基本实现 &…

仿哔哩哔哩视频app小程序模板源码

仿哔哩哔哩视频app小程序模板源码 粉色的哔哩哔哩手机视频网页&#xff0c;多媒体视频类微信小程序ui前端模板下载。包含&#xff1a;视频主页和播放详情页。 仿哔哩哔哩视频app小程序模板源码

【漏洞复现】方正全媒体采编系统——SQL注入

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 方正全媒体采编系统&#xff08;FZMediaEditor&#xff09;是一…

短信群发平台适用于哪些行业?

短信群发平台作为一种高效、快速且成本相对较低的通信方式&#xff0c;适用于多个行业。以下是一些主要适用行业的概述&#xff1a; 1. 零售与电商行业 应用场景&#xff1a;零售和电商企业可以利用短信群发进行新品推广、促销信息发布、订单状态更新、物流跟踪通知等。 2. 金…

【ARMv8/v9 GIC 系列 1.7 -- GIC PPI | SPI | SGI | LPI 中断使能配置介绍】

请阅读【ARM GICv3/v4 实战学习 】 文章目录 GIC 各种中断使能配置PPIs(每个处理器私有中断)SPIs(共享外设中断)SGIs(软件生成的中断)LPIs(局部中断)GIC 各种中断使能配置 在ARM GICv3和GICv4架构中,不同类型的中断(如PPIs、SPIs、SGIs和LPIs)可以通过不同的方式进…

springboot331+vue“有光”摄影分享网站系统+论文+源码+讲解

第3章 系统分析 3.1 可行性分析 3.1.1技术可行性 研发设计程序流程挑选面向对象设计、功能齐全、简单实用的Java编程设计核心理念。MySQL数据库存储数据。Idea工具作为编程软件&#xff0c;win10计算机操作系统作为应用系统&#xff0c;以及数据库可视化工具等技术职称。一般…

STM32自己从零开始实操08:STM32主控原理图

由于老师使用的各引脚分门别类的单片机原理图我没有找到&#xff0c;我使用是引脚按顺序摆放的&#xff0c;不方便一个模块一个模块截图展示&#xff0c;所以这部分使用老师的原理图。 一、电源 1.1电源的介绍 1.1.1数字电源和地&#xff08;VDD和VSS&#xff09; 数字电源…

FlinkCDC-3.1.1 DataStream Source

问题&#xff1a; Caused by: java.lang.ClassNotFoundException: org.apache.flink.table.catalog.ObjectPath 解决&#xff1a; 在poml文件中&#xff0c;导入的flink-table依赖把“ <scope>”去掉 <properties><maven.compiler.source>8</maven.compi…

【MySQL】mysqldumpslow工具 -- 总结慢查询日志文件

1. 作用 在平时使用MySQL数据库时&#xff0c;经常进行查询操作&#xff0c;有些查询语句执行的时间非常长&#xff0c;当执行时间超过设定的阈值时&#xff0c;我们称这个查询为慢查询&#xff0c;慢查询的相关信息通常需要用日志记录下来称为慢查询日志&#xff0c;mysqldum…

“未来已来·智能共融”高峰论坛在京成功举办

在人工智能技术的澎湃浪潮中,其与传统产业的深度融合正逐步成为驱动区域经济增长的新引擎。2024年7月4号,一场以“未来已来智能共融——探索人类智能与人工智能共生共进的新路径”为主题的高峰论坛在北京电子科技职业学院图书馆圆满落幕,为北京经济技术开发区(简称“北京经开区…

Django动态页面

一步一步跟着我理清楚。 一、在所有app之外创建templates&#xff0c;里面放的base.html是模板文件 base.html里面的具体代码如下&#xff0c;最重要的是这个地方content属于之后可动态替换的地方。 而这个load static 加载静态则代表一下全是固定的静态页面。 {% load static…

高可用hadoop分布式节点的扩容

解决方案 修改hdfs-site.xml 文件 原xml文件 <?xml version"1.0" encoding"UTF-8"?> <?xml-stylesheet type"text/xsl" href"configuration.xsl"?> <!--Licensed under the Apache License, Version 2.0 (th…

业务发展中 10 个最佳的 OKR 示例

业务发展是推动组织增长、培养合作伙伴关系和扩大市场覆盖范围的重要职能。目标和关键结果 (OKR) 可以作为推动业务发展工作和实现战略目标的强大工具。在这里&#xff0c;我们展示了业务发展中的十个最佳 OKR 示例&#xff0c;为旨在在该领域脱颖而出并实现其增长目标的组织提…

SpringMVC源码解析(一):web容器启动流程

SpringMVC源码系列文章 SpringMVC源码解析(一)&#xff1a;web容器启动流程 目录 一、SpringMVC全注解配置1、pom文件2、web容器初始化类(代替web.xml)3、SpringMVC配置类(代替springmvc.xml)4、测试Controller 二、SpringServletContainerInitializer1、web容器初始化入口2、…

【人工智能】-- 智能家居

个人主页&#xff1a;欢迎来到 Papicatch的博客 课设专栏 &#xff1a;学生成绩管理系统 专业知识专栏&#xff1a; 专业知识 文章目录 &#x1f349;引言 &#x1f349;基于深度卷积神经网络的表情识别 &#x1f348;流程图 &#x1f348;模型设计 &#x1f34d;网络架…

大厂面试官问我:Redis缓存如果扛不住,该怎么办?【后端八股文十一:Redis缓存八股文合集(1)】

本文为【Redis分布式锁八股文合集&#xff08;2&#xff09;】初版&#xff0c;后续还会进行优化更新&#xff0c;欢迎大家关注交流~ hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&…

C++ | Leetcode C++题解之第22题完全二叉树的节点个数

题目&#xff1a; 题解&#xff1a; class Solution { public:int countNodes(TreeNode* root) {if (root nullptr) {return 0;}int level 0;TreeNode* node root;while (node->left ! nullptr) {level;node node->left;}int low 1 << level, high (1 <&…