当前位置: 首页 > article >正文

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

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
}

暂时没有了~


http://www.kler.cn/a/319987.html

相关文章:

  • Oracle 批量投入数据方法总结
  • redis(2:数据结构)
  • 镭速大文件传输视频文件预览实现原理
  • cursor重构谷粒商城02——30分钟构建图书管理系统【cursor使用教程番外篇】
  • MySQL-索引
  • Unity搭配VS Code使用
  • 数字IC设计\FPGA 职位经典笔试面试整理--基础篇2
  • TCP/IP 协议栈
  • 第五届计算机科学与管理科技国际学术会议(ICCSMT 2024)
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-25
  • 【Hadoop】【vim编辑器】【~/.bashrc 文件】如何编辑
  • 计算机网络复习大纲
  • 二叉树的基本概念(下)
  • 技术成神之路:设计模式(十五)中介者模式
  • VulnHub-Bilu_b0x靶机笔记
  • 大数据新视界 --大数据大厂之HBase 在大数据存储中的应用与表结构设计
  • K8S精进之路-控制器StatefulSet有状态控制 -(2)
  • qmt量化交易策略小白学习笔记第67期【qmt编程之获取ETF申赎清单】
  • 封装一个vue3的文件上传组件(拖拽或点击选择文件)
  • C++ | Leetcode C++题解之第437题路径总和III
  • react + antDesign封装图片预览组件(支持多张图片)
  • 服务端的 Session 详解
  • 无人机避障——4D 毫米波雷达 SLAM篇(一)
  • 3D扫描建模能代替传统建模吗?
  • 大觅网之业务部署(Business deployment of Da Mi Network)
  • Python发送邮件教程:如何实现自动化发信?