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

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

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

QDebug 打印

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

cpp 复制代码
#include <QDebug>

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

看一下效果:

开启弹窗 Dialog

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

cpp 复制代码
#include "GPUDialog.h"  // 引入弹窗文件

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

写入配置文件

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

cpp 复制代码
#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;

看一下打印结果:

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

弹出警示框

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

cpp 复制代码
#include <QMessageBox>

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

弹出确认框

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

cpp 复制代码
#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 程序:

cpp 复制代码
#include <QProcess>

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

创建文件夹

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

cpp 复制代码
#include <QDir>  // 引入库

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

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

创建文件

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

cpp 复制代码
#include <QDir>  // 引入库

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

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

输入框输入格式校验

cpp 复制代码
// 实现文本框只允许输入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);

获取网络日期

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

cpp 复制代码
#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 序列号

cpp 复制代码
#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 ;
}

获取系统硬盘信息

cpp 复制代码
#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 编码

cpp 复制代码
#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
}

暂时没有了~

相关推荐
qq_433554547 分钟前
C++ 面向对象编程:+号运算符重载,左移运算符重载
开发语言·c++
努力学习编程的伍大侠11 分钟前
基础排序算法
数据结构·c++·算法
数据小爬虫@26 分钟前
如何高效利用Python爬虫按关键字搜索苏宁商品
开发语言·爬虫·python
ZJ_.28 分钟前
WPSJS:让 WPS 办公与 JavaScript 完美联动
开发语言·前端·javascript·vscode·ecmascript·wps
Narutolxy33 分钟前
深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道20241223
开发语言·golang·gin
Hello.Reader41 分钟前
全面解析 Golang Gin 框架
开发语言·golang·gin
禁默1 小时前
深入浅出:AWT的基本组件及其应用
java·开发语言·界面编程
yuyanjingtao1 小时前
CCF-GESP 等级考试 2023年9月认证C++四级真题解析
c++·青少年编程·gesp·csp-j/s·编程等级考试
Code哈哈笑1 小时前
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
java·开发语言·学习
程序猿进阶1 小时前
深入解析 Spring WebFlux:原理与应用
java·开发语言·后端·spring·面试·架构·springboot