首页 > 编程语言 >QT C++ 自学积累 『非技术文』

QT C++ 自学积累 『非技术文』

时间:2024-09-25 11:23:31浏览次数:7  
标签:非技术 QT C++ 网卡 获取 QString include 弹窗 result

QT C++ 自学积累 『非技术文』

最近一段时间参与了一个 QT 项目的开发,使用的是 C++ 语法,很遗憾的是我之前从来没有接触过 C++ ,大学没有开过这堂课,也没用自己学习过,所有说上手贼慢,到现在为止其实也不是很清楚具体的开发技巧,毕竟是参与,东一复制西一粘贴的,就拉倒了。里面用到了很多东西,尽管很简单很简单,但是对于没有接触过的人来说还是很值得记录一下的,这篇博文只是自己学习记录,没啥营养,浅看则以,切勿尽信!对了,用的 QT5 哈,其他版本的不知道嗷!

在这里插入图片描述

QDebug 打印

在项目开发过程中难免遇到打印调试数据,打印数据很简单,引入 QDebug,然后就可以使用了:

#include <QDebug>

qDebug() << "hello, I'm + V";

看一下效果:

在这里插入图片描述

开启弹窗 Dialog

这玩意儿,首先得有弹窗文件,有弹窗文件就好说了,直接调用一下让他弹出来就行,比如做了一个叫做 GPUDialog 的弹窗:

#include "GPUDialog.h"  // 引入弹窗文件

GPUDialog gpuDialog;  // 实例化一个弹窗
gpuDialog.exec();   // 打开弹窗

写入配置文件

在QT里面嘞,有些配置数据可能需要写入配置文件,然后怎么写呢,用 QSetting:

#include <QSettings>

// 创建 QSettings
QSettings* setting = new QSettings("./config.ini", QSettings::IniFormat);
setting->setValue("ed/name", "+V");  // 写入配置
setting->setValue("ed/age", 18);  // 写入配置

QString name = setting->value("ed/name").toString(); // 读取配置
QString age = setting->value("ed/age").toString(); // 读取配置
qDebug() << name << age;

看一下打印结果:

在这里插入图片描述

当然配置文件内容也可以看一下,是这个样子的:

在这里插入图片描述

弹出警示框

比如说,我们点击一个表单的提交按钮,如果没有输入表单数据,就需要提示用户清闲输入内容。

#include <QMessageBox>

QString warningTitle(tr("Data is empty"));
QMessageBox::warning(this, warningTitle, 
	tr("Please enter the data first and try again!"), QMessageBox::Ok);

在这里插入图片描述

弹出确认框

这个和上面的是差不多的,比如我们需要点击一个 “运行” 按钮,需要二次确认的时候,经常用到这种弹窗:

#include <QMessageBox>

QMessageBox::StandardButton response = QMessageBox::question(
        nullptr, "Kill Exe Confirm", "Secondary Confirmation Dialogue Box Demonstration", QMessageBox::Yes | QMessageBox::No);
if (response == QMessageBox::Yes)
{
    qDebug() << "Yes";
} else {
    qDebug() << "No";
}

看一下效果:

在这里插入图片描述

然后看一下控制台打印的数据:

在这里插入图片描述

关闭第三方 exe 程序

比如说我们写一个程序,在程序需要执行的时候,需要关闭掉其他应用程序,就像是某些付费视频,配套专用的播放器,启动播放器的时候,他会把你电脑启动的截图、录屏插件全部强制杀死,就是一样的功能,不如下面案例,杀死 PixPin.exe 程序:

#include <QProcess>

QString progress = "taskkill /im PixPin.exe /f";
QProcess::execute(progress);

创建文件夹

创建文件夹就肯简单了,两行命令完成:

#include <QDir>  // 引入库

QDir dir;
dir.mkpath("./wjw");  // 创建文件夹

看一下,在当前exe同级目录下就会出现我们创建的文件夹:

在这里插入图片描述

创建文件

创建文件和创建文件夹功能类似,但是代码有些区别:

#include <QDir>  // 引入库

QDir dirPath("./");
QString filePathStr = dirPath.filePath("wjw.txt");
QFile file(filePathStr);
if (!file.open(QIODevice::WriteOnly)) { return; }
file.close();

嘿嘿,再看一下结果,这个文件出来啦 :

在这里插入图片描述

输入框输入格式校验

// 实现文本框只允许输入float类型
#include <QDoubleValidator>

QDoubleValidator* validator = new QDoubleValidator(this);
validator->setNotation(QDoubleValidator::StandardNotation);
this->ui->lineEdit->setValidator(validator);

// 实现文本框只允许输入int类型
#include <QIntValidator>

QIntValidator* validatorInt = new QIntValidator(this);
this->ui->lineEdit_2->setValidator(validatorInt);

获取网络日期

我们有的时候需要获取网络时间,这个时候就用下面的方法:

#include <QDateTime>
#include <QTcpSocket>
#include <QDate>

// 获取网络时间,如果没有获取到,则获取系统时间
QString Widget::getNetTime() {
    QStringList urls;
    urls << "time-b-g.nist.gov"
         << "time-c-g.nist.gov"
         << "time-d-g.nist.gov"
         << "time-e-g.nist.gov"
         << "time-a-wwv.nist.gov"
         << "time-b-wwv.nist.gov"
         << "time-c-wwv.nist.gov"
         << "time-d-wwv.nist.gov"
         << "time-e-wwv.nist.gov"
         << "time-a-b.nist.gov"
         << "time-b-b.nist.gov"
         << "time-c-b.nist.gov"
         << "time-d-b.nist.gov"
         << "time-e-b.nist.gov"
         << "time.nist.gov"
         << "utcnist.colorado.edu"
         << "utcnist2.colorado.edu";
    bool isFind = false;
    QString netTime    = "";
    QTcpSocket *socket = new QTcpSocket();
    for (int i = 0; i < urls.size(); i++)
    {
        socket->connectToHost(urls.at(i), 13);
        if (socket->waitForConnected())
        {
            if (socket->waitForReadyRead())
            {
                QString str(socket->readAll());
                netTime = str.trimmed();
                netTime = str.section(" ", 1, 2);
                isFind = true;
                break;
            }
        }
        socket->close();
    }
    if(isFind)
    {
        QDateTime utcDateTime = QDateTime::fromString(netTime, "yy-MM-dd HH:mm:ss");
        utcDateTime.setTimeSpec(Qt::UTC);
        netTime = utcDateTime.toLocalTime().toString("yy-MM-dd");
    } else {
        QDateTime currentDateTime = QDateTime::currentDateTime();
        netTime = currentDateTime.toString("yy-MM-dd");
    }
    delete socket;
    return netTime;
}

获取 CPU 序列号

#include <QProcess>
#include <windows.h>
#include <QStringList>

// 获取CPU序列号
QString Widget::getCpuId()
{
    QProcess p;
    QString cmd = "wmic cpu get processorid";
    p.start(cmd);
    p.waitForFinished();
    QString result = QString::fromLocal8Bit(p.readAllStandardOutput());
    QStringList list = cmd.split(" ");
    result = result.remove(list.last(), Qt::CaseInsensitive);
    result = result.replace("\r", "");
    result = result.replace("\n", "");
    result = result.simplified();
    return result ;
}

获取系统硬盘信息

#include <QProcess>
#include <windows.h>
#include <QStringList>

// 获取硬盘信息
QString Widget::getDiskID()
{
    QProcess p;
    QString cmd = "wmic diskdrive get model";
    p.start(cmd);
    p.waitForFinished();
    QString result = QString::fromLocal8Bit(p.readAllStandardOutput());
    QStringList list = cmd.split(" ");
    result = result.remove(list.last(), Qt::CaseInsensitive);
    result = result.replace("\r", "");
    result = result.replace("\n", "");
    result = result.simplified();
    return result ;
}

获取 MAC 编码

#include <QNetworkInterface>

// 获取MAC编码
QString Widget::GetMacByNetworkInterface() {
    QList<QNetworkInterface> NetList;//网卡链表
    int NetCount = 0;//网卡个数
    int Neti = 0;
    QNetworkInterface thisNet;//所要使用的网卡

    NetList = QNetworkInterface::allInterfaces();//获取所有网卡信息
    NetCount = NetList.count();//统计网卡个数

    for (Neti = 0; Neti < NetCount; Neti++) {//遍历所有网卡
        if (NetList[Neti].isValid()) {//判断该网卡是否是合法
            thisNet = NetList[Neti];//将该网卡置为当前网卡
            break;
        }
    }
    return thisNet.hardwareAddress().replace(":", "-"); //获取该网卡的MAC
}

暂时没有了~

标签:非技术,QT,C++,网卡,获取,QString,include,弹窗,result
From: https://www.cnblogs.com/wjw1014/p/18430961

相关文章

  • 【C++】vector-1
    文章目录1.vector的介绍及使用1.1vector的介绍1.2vector的使用1.2.1vector的定义1.2.2vectoriterator的使用1.2.3vector空间增长问题1.2.4vector增删查改1.vector的介绍及使用1.1vector的介绍1.vector是表示可变大小数组的序列容器。2.就像数组一样,vec......
  • C++模拟真人鼠标轨迹
    一.API跨语言平台支持鼠标轨迹API底层实现采用C/C++语言,利用其高性能和系统级访问能力,开发出高效的鼠标轨迹模拟算法。通过将算法封装为DLL(动态链接库),可以方便地在不同的编程环境中调用,实现跨语言的兼容性。通过DLL封装,开发者可以在C++、Python、易语言、按键精......
  • onnxruntime c++ 推理例子
    资源释放的问题。onnxruntime的对象release是无效的,从接口源码上只是将指针赋空。并未实际释放。要实现释放,需要以指针形式实现。一个例子如下:#include<onnxruntime_cxx_api.h>voidtestimage(){Matimage=imread("ae14.jpg",IMREAD_UNCHANGED); //创建会话选项 O......
  • C++: unordered系列关联式容器
    目录1.unordered系列关联式容器1.1unordered_map1.2unordered_set2.哈希概念3.哈希冲突4.闭散列5.开散列博客主页:酷酷学感谢关注!!!正文开始1.unordered系列关联式容器在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到......
  • C++ Practical-1 day6
    系列文章目录点击直达——文章总目录文章目录系列文章目录C++Practical-1day6Overview1.abstract_class抽象类1.1.抽象类的特点1.2.示例:抽象类1.3.注意事项2.virtual_function虚函数2.1.示例:动物叫声的多态性2.2.示例:计算图形的面积2.3.注意事项关于作者C+......
  • 自梳理C++八股
    1.左右值引用的理解回答:“左右值引用是C++11引入的一项重要特性,用于优化资源管理和提升性能。具体来说:左值引用(LvalueReference):左值引用可以类比为对象的别名,它允许多个引用共享一个实体对象,常用于函数参数传递以避免对象拷贝。左值引用只能绑定到一个命名的持久对象,适合用......
  • 阿里云ecs使用nginx部署mqtt服务的tcp转发
    一、什么是MQTT?MQTT(MessageQueuingTelemetryTransport)是一种轻量级、基于发布-订阅模式的消息传输协议,适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎,能够实现传感器、执行器和其它设备之间的高效通信。二、为什么MQTT是适用于物联网的最......
  • 【C++】STL详解之string类
    本次内容大纲:什么是STLSTL(standardtemplatelibaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。STL的版本原始版本AlexanderStepanov、MengLee在惠普实验室完成的原始版本,本着开源精神,他们声明允许任......
  • C++ IO 类
    IO库:istream(输入流)类型,提供输入操作。ostream(输出流)类型,提供输出操作。cin,一个istream对象,从标准输入读取数据。cout,一个ostream对象,向标准输出写入数据。cerr,一个ostream对象,通常用于输出程序错误消息,写入到标准错误。>>运算符,用来从一个istream对象读取输入数据。<......
  • C++语言的词汇
    关键字关键字:也称保留字,它是由C++语言本身预先定义好的一类单词基本数据类型和布尔类型int、float、double、char、bool:用于声明整型、浮点型、字符型和布尔型变量。true、false:布尔类型的两个字面量值。复杂数据类型与类class:用于声明类,是C++面向对象编程的基础。str......