C++/Qt 小知识记录4

工作中遇到的一些小问题,总结的小知识记录:C++/Qt

小知识4

  • mysql导入*.sql文件提示连接超时等问题
  • mysql局域网内访问
  • VLC低版本的匹配
  • QLineEdit的正则表达式限制
  • 获取windows下已加载磁盘盘符
  • QLabel自动换行
  • QElapsedTimer间隔计时
  • 自定义Class作为Key需要重载的函数
  • QWebEngineView嵌入的网页支持下载文件到本地

mysql导入*.sql文件提示连接超时等问题

cmd使用root用户进入mysql执行:

set global max_allowed_packet = 2*1024*1024*100;
set interactive_timeout=24*3600;
改变语句支持的大小限制,和超时限制

mysql局域网内访问

grant all privileges on . to root@’%’ identified by"root";
设置局域网内所有ip都可以访问本机。

VLC低版本的匹配

在这里插入图片描述
更高版本因为已经支持C++11及其以上,所以选择尽量高的版本都可以支持。

  1. cmake配置:

参考博文:https://blog.csdn.net/wj2itp08/article/details/78391261
把vlc的sdk内容做了一些拷贝工作,到Qt下
*注意:VLC的环境变量其实不用设置。
在这里插入图片描述

按参考操作后,自己的cmake配置:
在这里插入图片描述
2. 编译成功,Install生成拷贝到CMAKE_INSTALL_PREFIX下。
3. Install时遇到如下几个库未找到的情况,在系统库里找或者拷贝正确的到qt的bin目录下(不是特别重要,主要是保证完整的运行环境)
在这里插入图片描述
4. Install后,建议把vlc-x.x.x下的Plugins路径拷贝到生成路径下覆盖一次(删除原来的后覆盖)。虽然在最开始已经拷贝的Qt的路径下了,但为了保险,还是从原始处拷贝覆盖一份。

QLineEdit的正则表达式限制

只能输入英文大小写字母和英文逗号:^[a-zA-Z0-9,]+$
只能输入数字和逗号:^[0-9,]+$
只能输入数字带小数和逗号:^[0-9.,]+$

Qt的调用方式:

QRegExp regx("^[0-9,]+$");
QValidator *validator = new QRegExpValidator(regx, ui->lineEdit);
ui->lineEdit->setValidator(validator);

获取windows下已加载磁盘盘符

#ifdef WIN32
#include <Windows.h>
#endif

std::vector<std::string> GetWindowsDriverName()
{
	std::vector<std::string> vecDriver;

#ifdef WIN32

	char rootPath[10] = { 0 }, driveType[21] = { 0 };
	unsigned int nType;
	for (char a = 'A'; a <= 'Z'; a++)
	{
		sprintf_s(rootPath, "%c:\\", a);
		nType = GetDriveTypeA(rootPath);
		if (nType != DRIVE_NO_ROOT_DIR) // DRIVE_NO_ROOT_DIR: 路径无效  
		{
			vecDriver.push_back(rootPath);
		}
	}

#endif

	return vecDriver;
}

QLabel自动换行

ui->label_name->setWordWrap(true);

QElapsedTimer间隔计时

QElapsedTimer使用运行平台所支持的某种单调参考时钟,支持类型:

enum ClockType
{ SystemTime, MonotonicClock, TickCounter, MachAbsoluteTime, PerformanceCounter }
//简单使用示例
QElapsedTimer elapsed;
elapsed.start();
std::vector<qint64> vec;
int i = 1000000;
while (i >= 0)
{
	i--;
	if (i % 10000 == 0)
	{
		vec.push_back(elapsed.nsecsElapsed());
	}
}

qint64 over_ms = elapsed.elapsed();
for (int i =0; i < vec.size(); i++)
{
	std::cout << "ns:" << elapsed.nsecsElapsed() << std::endl;
}
std::cout << "ms:" << over_ms << std::endl;

输出:
在这里插入图片描述

自定义Class作为Key需要重载的函数

比如在std::map中或者std::set中,需要自定义的类作为索引的key,需要重载几个需要的operator才能满足template模板类的使用。
eg:

class CDevKey
{
public:

	CDevKey(const QString& dydevid, const QString referprog);
	CDevKey();
	bool operator==(const CDevKey& rhs) const;
	bool operator!=(const CDevKey& rhs) const;
	bool operator<(const CDevKey& rhs) const;
	~CDevKey();

	QString ToString() const;
	bool IsValid() const;

public:

	QString m_strDyDevid;
	QString m_strReferprog;
};

QWebEngineView嵌入的网页支持下载文件到本地

嵌入Web网页,如果网页内有下载文件到本地的触发请求,或者跳转网页后,触发下载请求的,QWebEngineProfile可以满足需求。
(注意:有两种方式,一种是网页内直接触发,一种是跳转到新的网页触发)

方法:使用QWebEngineProfile获取Request的触发,获取QWebEngineDownloadItem的下载进度和状态。

  1. QWebEngineView获取QWebEngineProfile方式(关系):
    从View中获取Page,在获取Profile。
void CWebTransformerView::InitDownloadHandler(QWebEngineView* pView)
{
	if (NULL == pView)
	{
		return;
	}

	QWebEnginePage* pPage = pView->page();
	if (NULL == pPage)
	{
		return;
	}

	QWebEngineProfile* pProfile = pPage->profile();
	if (NULL == pProfile)
	{
		return;
	}

	connect(pProfile, &QWebEngineProfile::downloadRequested, this, &CWebTransformerView::SlotWebDownloadRequested);
}

当前网页支持下载,其实就是在构造函数调用InitDownloadHandler(也是为后面的跳转新网页下载做复用提取出的公用函数):

CWebTransformerView::CWebTransformerView(QWidget *parent)
	: QWebEngineView(parent)
	, m_pCurrentSubView(NULL)
	, m_pDownloadDialog(NULL)
	, m_pCurDownload(NULL)
{
	InitDownloadHandler(this); //当前网页也支持下载
}
  1. QWebEngineProfile的Request信号与槽
connect(pProfile, &QWebEngineProfile::downloadRequested, this, &CWebTransformerView::SlotWebDownloadRequested);

即view内网页触发了下载请求,则会发送downloadRequested信号,触发到我们的槽内,得到一个QWebEngineDownloadItem的对象,即对应一个下载项。

void CWebTransformerView::SlotWebDownloadRequested(QWebEngineDownloadItem *download)
{
	if (NULL == download)
	{
		return;
	}

	//download下载状态信号
	connect(download, &QWebEngineDownloadItem::finished, this, &CWebTransformerView::SlotWebDownloadFinished);
	connect(download, &QWebEngineDownloadItem::downloadProgress, this, &CWebTransformerView::SlotWebDownloadProgress);
	connect(download, &QWebEngineDownloadItem::stateChanged, this, &CWebTransformerView::SlotWebDownloadState);
	download->accept();

	//本地记录
	m_pCurDownload = download;

	//下载进度对话框初始化
	if (NULL == m_pDownloadDialog)
	{
		m_pDownloadDialog = new QProgressDialog(this);
		m_pDownloadDialog->setWindowTitle(ConvertCharArrayToQString("模型下载"));
		m_pDownloadDialog->setAutoClose(false);
		connect(m_pDownloadDialog, &QProgressDialog::canceled, this, &CWebTransformerView::SlotProgressCancel);
	}
	QString strPath = download->path();
	QFileInfo info(strPath);

	m_pDownloadDialog->setLabelText(ConvertCharArrayToQString("下载模型到本地:") + info.fileName());
	m_pDownloadDialog->setRange(0, 100);
	m_pDownloadDialog->show();
}
  1. QWebEngineDownloadItem的download信号与槽
    download的item对应的几个下载相关信号:下载状态、进度、结束。
connect(download, &QWebEngineDownloadItem::finished, this, &CWebTransformerView::SlotWebDownloadFinished);
connect(download, &QWebEngineDownloadItem::downloadProgress, this, &CWebTransformerView::SlotWebDownloadProgress);
connect(download, &QWebEngineDownloadItem::stateChanged, this, &CWebTransformerView::SlotWebDownloadState);
  1. 关于跳转页面的下载Request获取
    方法是获取这个跳转的新页面的QWebEngineView,该View对象调用最开始的InitDownloadHandler后,即它的Profile连接同样的SlotWebDownloadRequested槽,后面的下载操作就复用了。
    在这里插入图片描述
    createWindow内的实现,就是把触发的页面跳转信号捕捉出来,创建一个新的view去接收,同时它的Profile连接Request操作。
// ===== Override 

QWebEngineView * CWebTransformerView::createWindow(QWebEnginePage::WebWindowType type)
{
	QWebEngineView *webbrowser = new QWebEngineView(this);
	InitDownloadHandler(webbrowser);

	m_pCurrentSubView = webbrowser;

	return webbrowser;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/122866.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spark SQL

Spark SQL 本文来自 B站 黑马程序员 - Spark教程 &#xff1a;原地址 第一章 SparkSql快速入门 1.1 什么是SparkSql Spark Sql is Spark’s module for working with strutured data. Spark Sql是Spark的模块&#xff0c;用于处理海量结构化数据 限量&#xff1a;结构化数据…

Tomcat的类加载器

详情可以参考&#xff1a;https://tomcat.apache.org/tomcat-10.1-doc/class-loader-howto.html 简要说明 Tomcat安装了多种类加载器&#xff0c;以便容器的不同部分、容器中的应用访问能够不同的类和资源。 在Java环境中&#xff0c;类加载器被组织为父-子树的形式。通常情况…

文件包含漏洞培训

CTF介绍 MISC(Miscellaneous)类型,即安全杂项,题目或涉及流量分析、电子取证、人肉搜索、数据分析等等。CRYPTO(Cryptography)类型,即密码学,题目考察各种加解密技术,包括古典加密技术、现代加密技术甚至出题者自创加密技术。PWN类型,PWN在黑客俚语中代表着攻破、取得权限…

技术分享 | app自动化测试(Android)-- 属性获取与断言

断言是 UI 自动化测试的三要素之一&#xff0c;是 UI 自动化不可或缺的部分。在使用定位器定位到元素后&#xff0c;通过脚本进行业务操作的交互&#xff0c;想要验证交互过程中的正确性就需要用到断言。 常规的UI自动化断言 分析正确的输出结果&#xff0c;常规的断言一般包…

Qt实现动态桌面小精灵(含源码)

目录 一、设计思路 二、部分源码演示 三、源码地址 🌈write in front🌈 🧸大家好,我是三雷科技.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由三雷科技原创 CSDN首发🐒 如需转载还请通知⚠️ 📝个人主页:三雷科技🧸—CSDN博客 🎁欢…

Leetcode刷题详解——字母大小写全排列

1. 题目链接&#xff1a;784. 字母大小写全排列 2. 题目描述&#xff1a; 给定一个字符串 s &#xff0c;通过将字符串 s 中的每个字母转变大小写&#xff0c;我们可以获得一个新的字符串。 返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。 示例 1&#xff1a; 输入&…

渲染管线详解

光栅化的渲染管线一般分为三大阶段&#xff1a;应用程序阶段->几何阶段->光栅化阶段 也可以四大阶段&#xff1a; 应用程序阶段->几何阶段->光栅化阶段->逐片元操作阶段 更详细的流程如下&#xff1a; Vertex Specification&#xff08;顶点规范化&#xff09…

刚接触银行新业务测试的一些问题

在银行金融领域的测试工作&#xff0c;相信很多测试工程师都会遇到自己不熟悉的业务。然后开始看文档&#xff0c;问开发或者需求人员。搞懂了大概的流程&#xff0c;然后开始进行测试。 不过遇到复杂的业务情况时&#xff0c;真的很需要时间去梳理。而且测试环境的配置问题、不…

【自然语言处理】基于python的问答系统实现

一&#xff0c;文件准备 该问答系统是基于已知的问题和其一一对应的答案进行实现的。首先需要准备两个文本文件&#xff0c;分别命名为“question.txt”和“answer.txt”&#xff0c;分别是问题文件和答案文件&#xff0c;每一行是一个问题以及对应的答案。 问题文件: 中国的首…

在群晖NAS上使用AudioStation实现本地音频公网共享

文章目录 1. 本教程使用环境&#xff1a;2. 制作音频分享链接3. 制作永久固定音频分享链接&#xff1a; 之前文章我详细介绍了如何在公网环境下使用pc和移动端访问群晖Audio Station&#xff1a; 公网访问群晖audiostation听歌 - cpolar 极点云 群晖套件不仅能读写本地文件&a…

Spring Boot中配置多个数据源

配置数据源实际上就是配置多个数据库&#xff0c;在一个配置文件中配置多个数据库&#xff0c;这样做主要的好处有以下几点&#xff1a; 数据库隔离&#xff1a;通过配置多个数据源&#xff0c;可以将不同的业务数据存储在不同的数据库中&#xff0c;实现数据的隔离。这样可以…

安全易用的文件同步程序:Syncthing | 开源日报 No.70

syncthing/syncthing Stars: 55.0k License: MPL-2.0 Syncthing 是一个持续文件同步程序&#xff0c;它在两台或多台计算机之间同步文件。该项目的主要功能和核心优势包括&#xff1a; 安全防止数据丢失抵御攻击易于使用自动化操作&#xff0c;仅在必要时需要用户交互适合在各…

Pytest系列(16)- 分布式测试插件之pytest-xdist的详细使用

前言 平常我们功能测试用例非常多时&#xff0c;比如有1千条用例&#xff0c;假设每个用例执行需要1分钟&#xff0c;如果单个测试人员执行需要1000分钟才能跑完当项目非常紧急时&#xff0c;会需要协调多个测试资源来把任务分成两部分&#xff0c;于是执行时间缩短一半&#…

船舶数据采集与数据模块解决方案

标准化信息处理单元原理样机初步方案&#xff1a; 1&#xff09;系统组成 标准化信息处理单元原理样机包含硬件部分和软件部分。 硬件部分包括集成电路板、电源模块、主控模块、采集模块、信息处理模块、通讯模块、I/O模块等。 软件部分包括协议统一标准化模块、设备互联互…

R语言将向量横向转换为单行数据框,随后整合数量不确定的数据框

vector1 c(1, “karthik”, “IT”) names(vector1) c(“id”, “name”, “branch”) df data.frame(as.list(vector1)) print(df) 先给向量的元素命名&#xff0c;然后转换为列表&#xff0c;最后转换为数据框。 我的需求大概是这个样子&#xff1a;数量不确定的仅有单行…

猫罐头怎么选?千万别错过这5款好吃放心的猫罐头推荐!

猫罐头不仅美味可口&#xff0c;而且营养丰富&#xff0c;是专为猫咪打造的美食。那么&#xff0c;猫罐头怎么选&#xff1f;作为一位经营宠物店7年的店长&#xff0c;我对猫猫的饮食都非常重视&#xff0c;也见证了很多猫咪品尝各种猫罐头的瞬间&#xff0c;现在我对各个品牌的…

信创加速,美创科技加入UOS主动安全防护计划(UAPP)

近日&#xff0c;统信UOS主动安全防护计划 (UAPP) 技术沙龙暨新老会员交流活动在北京召开。 美创科技作为信创产业的重要参与者受邀参加。在2023年度UAPP合作伙伴授牌发布仪式上&#xff0c;美创科技获得统信软件授牌&#xff0c;正式成为UAPP成员单位&#xff0c;将与统信软件…

共话医疗数据安全,美创科技@2023南湖HIT论坛,11月11日见

11月11日浙江嘉兴 2023南湖HIT论坛 如约而来 深入数据驱动运营管理、运营数据中心建设、数据治理和数据安全、数据资产“入表”等热点、前沿话题 医疗数据安全、数字化转型深耕者—— 美创科技再次深入参与 全新发布&#xff1a;医疗数据安全白皮书 深度探讨&#xff1a;数字…

详细创建Prism架构wpf项目

方案一&#xff1a; 1.创建一个普通wpf项目 2、安装NuGet包&#xff1a;Prism.DryIoc 3、App.xaml.cs中: 将原本的父类Application改为&#xff1a;PrismApplication&#xff0c;并且实现抽象类 CreateShell方法中写上&#xff1a;”return Container.Resolve<MainWindow>…

分享4个MSVCP100.dll丢失的解决方法

msvcp100.dll是一个重要的动态链接库文件&#xff0c;它是Microsoft Visual C 2010 Redistributable Package的一部分。这个文件的作用是提供在运行C程序时所需的函数和功能。如果计算机系统中msvcp100.dll丢失或者损坏&#xff0c;就会导致软件程序无法启动运行&#xff0c;会…