C++/Qt 小知识记录4

news2024/11/27 20:36:10

工作中遇到的一些小问题,总结的小知识记录: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;
}

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

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

相关文章

重生奇迹MU之地下城简介

当重生奇迹游戏中的玩家等级达到了十多级之后&#xff0c;不再满足于城外的简单刷怪时&#xff0c;此时可以去地下城冒险一番&#xff0c;除却冰风谷以外&#xff0c;地下城就是重生奇迹中玩家人数最多的地方&#xff0c;因为这里的怪物数量众多&#xff0c;而且时常会爆出一些…

mac 安装adb命令执行耗电测试

1、mac安装brew&#xff1a; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"2、mac brew 安装adb&#xff1a; brew install android-platform-tools adb --version adb devices 3、adb命令查询包…

Spark 读取ES采坑系列

目录 一、使用的插件 二、ES集群和Elasticsearch-hadoop版本问题 三、Elasticsearch-hadoop 和Scala版本以及Spark版本&#xff08;版本不匹配会有各种异常信息 一、使用的插件 <dependency><groupId>org.elasticsearch</groupId><artifactId>elas…

Java线程状态转换

从java层面&#xff0c;线程状态分为六种&#xff0c;分别是New、Blocked、Waiting、Timed_Waiting、Terminated和Runnable New&#xff1a;初始状态&#xff0c;线程刚刚创建还未调用start方法&#xff0c;线程还没有和操作系统的线程关联起来 New->Runnable(箭头1)&#…

IP代理识别API:预防欺诈和保护网络安全的必要工具

引言 随着互联网的快速发展&#xff0c;我们的生活变得越来越依赖于网络。然而&#xff0c;随着网络的发展&#xff0c;网络犯罪和网络欺诈也在不断增加。为了保护自己的网站和客户免受网络欺诈的侵害&#xff0c;许多企业和组织开始使用IP代理识别API作为一种必要工具。 什么…

ChatGPT和API发生重大中断!

11月9日凌晨&#xff0c;OpenAI在官网发布&#xff0c;ChatGPT和API发生重大中断&#xff0c;导致全球所有用户无法正常使用&#xff0c;宕机时间超过2小时。 目前&#xff0c;OpenAI已经找到问题所在并进行了修复&#xff0c;但仍然不稳定&#xff0c;会继续进行安全监控。 …

Python 中的 re.sub 如何使用?各参数都是什么意思?有什么要注意的?怎么在线验证正则?

讲解之前&#xff0c;我们先来看一下该方法的官方注释&#xff1a; 翻译过来的意思大概是&#xff1a; “返回通过将字符串中最左边、不重叠的模式出现替换为替代字符串 repl 后获得的字符串。repl 可以是一个字符串或一个可调用对象&#xff1b;如果是一个字符串&#xff0c…

蓝桥杯每日一题2023.11.9

包子凑数 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 对于此题是一个简单DP的翻版问题&#xff0c;若能凑出当前的包子数&#xff0c;则凑出之前一定为dp[i - a[j]]&#xff0c;若表示出的dp[i]不是0则说明是一定存在数可以被凑出的&#xff0c;由题意&#xff1a;若凑不出的…

在Three.js中动画 简单案例

在Three.js中&#xff0c;动画是指在场景中创建和控制对象的运动和变化。模型是指通过Three.js加载的3D对象&#xff0c;可以是几何体、网格或复杂的模型文件&#xff08;如.obj或.gltf&#xff09;。动画可以存在于模型中&#xff0c;也可以单独定义。 编辑关键帧&#xff1a;…

OV2210 小封装过压/过流保护芯片 适用于小电流的便携产品

OV2210 是一款过压过流保护芯片&#xff0c;芯片内置高耐压保护 MOSFET &#xff0c;最高耐压达 30V &#xff0c;芯 片过压保护电压固定为 6.2V &#xff0c;过流保护固定为 1.5A &#xff0c;芯片会持续检测输入电压和电流&#xff0c;一旦发生过压和过流&#xff0c;立…

Geotrust证书

GeoTrust是著名的证书颁发机构DigiCert的品牌。GeoTrustSSL产品在Internet上提供从基本域名验证到扩展验证SSL标准支持的最高级验证的安全性。 GeoTrust OV&#xff08;组织验证&#xff09;证书验证域所有权和组织的存在。在颁发证书之前&#xff0c;会检查该组织在公共数据库…

【C语言学习】22 -文件管理

文章目录 1 remove()1.1 函数原型1.2 参数1.3 返回值1.4 示例 1 remove() 1.1 函数原型 remove()&#xff1a;删除文件&#xff0c;函数原型如下&#xff1a; int remove(const char *filename);1.2 参数 remove()函数只有一个参数filename&#xff1a; 参数filename是一个…

软件测试突破技术瓶颈之python接口自动化- DDT数据驱动测试

简单介绍 ​ DDT&#xff08;Date Driver Test&#xff09;&#xff0c;所谓数据驱动测试&#xff0c;简单来说就是由数据的改变从而驱动自动化测试的执行&#xff0c;最终引起测试结果的改变。通过使用数据驱动测试的方法&#xff0c;可以在需要验证多组数据测试场景中&#x…

手机也能搭建个人博客?安卓Termux+Hexo搭建属于你自己的博客网站

文章目录 前言 1.安装 Hexo2.安装cpolar3.远程访问4.固定公网地址 前言 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并结合…

【Python3】【力扣题】242. 有效的字母异位词

【力扣题】题目描述&#xff1a; 【Python3】代码&#xff1a; 1、解题思路&#xff1a;若字符串长度相同&#xff0c;依次遍历元素&#xff0c;比较两个字符串的该元素个数是否相同。【耗时长】 知识点&#xff1a;len(...)&#xff1a;获取序列&#xff08;字符串、列表等&…

Mysql 不同存储引擎数据文件的形式详解

目录 MyISAM MERGE InnoDB Memory Archive CSV BLACKHOLE MySQL 中的每一个数据表在磁盘上至少被表示为一个文件&#xff0c;即存放着该数据表结构定义的 .frm 文件。不同的存储引擎还有其它用来存放数据和索引信息的文件。 从 MySQL 8.0 版本开始&#xff0c;frm 表结构…

Python进行多线程爬取数据通用模板

首先&#xff0c;我们需要导入所需的库&#xff0c;包括requests和BeautifulSoup。requests库用于发送HTTP请求&#xff0c;BeautifulSoup库用于解析HTML文档。 import requests from bs4 import BeautifulSoup然后&#xff0c;我们需要定义一个函数来发送HTTP请求并返回响应。…

日常问题定位-网口不通

发现协商的Advertised link modes没有结果 自动协商不成功&#xff0c;手动协商无报错 可以通了

芯片洁净间的等级是如何划分的

芯片生产是一个非常精细且需要无尘的环境&#xff0c;这种环境通常被称为超净室或洁净室。洁净室是一个专门设计的封闭空间&#xff0c;其中空气中的颗粒物已被高度复杂的过滤系统限制或去除。通常&#xff0c;在大学的实验室中&#xff0c;我们最常接触的是百级间&#xff0c;…

教育照明灯具品牌,专业教育护眼台灯推荐

LED灯作为一种新型的照明产品&#xff0c;具有节能、环保、寿命长等优点&#xff0c;受到越来越多的人们的青睐。但是&#xff0c;市面上的LED灯品牌琳琅满目&#xff0c;让人眼花缭乱。那么&#xff0c;LED灯什么牌子好呢&#xff1f;下面我们来推荐五大品牌。 1.书客护眼台灯…