QT基础开发笔记

用VS 写QT ,设置exe图标的方法:

选定工程--》右键--》添加---》资源--》

0

QString 字符串用法总结说明

Qt QString 增、删、改、查、格式化等常用方法总结_qstring 格式化-CSDN博客

总结来说:

QString 的 remove有两种用法,:

1:删除自某个索引开始的n个长度的字符串,

2:删除字串中所有的相关字符(是否需要注意大小写),如:

QString str = "0a1A2aa3456789";

  1. str.remove(2, 4); // 得到新串: str:"016789

2. str.remove(QChar('a'),Qt::CaseInsensitive);

===> 0123456789

QPushButton->setMouseTracking(true);

SetMouseTracking的作作就是当鼠标悬停在按钮上方,按钮就可以响应鼠标的悬停事件,

如mouse hover之类的功能

QButtonGroup用法示例:

Qt 中QButtonGroup 的用法_qbuttongroup用法-CSDN博客

关于基础代码编程中,

QMainWindow必须要有一个中心窗口部件,而QDialog 却不需要,

也因此做纯代码编程,QMainWindow必须要添加一个QWidget作为中心部件,才行能正常显示

QWidget* globaWidget = new QWidget(this);

this->setCentralWidget(globaWidget);

QVBoxLayout* glayout = new QVBoxLayout;

globaWidget->setLayout(glayout);

QLabel* lb = new QLabel("Hello.....this is labe");

glayout->addWidget(lb);

glayout->addStretch();

QByteArray用法:

QByteArray使用_Alenfun的博客-CSDN博客

QGridlayout setColumnStretch,设置Stretch,

inputLayout->setColumnStretch(1, 1);

inputLayout->setColumnStretch(2, 1);

其作用 就是当遇到伸缩时,第 2,3列按1:1 同比例缩放

QT定时器用法,跟MFC 差不多:

1:启动定时器,startTimer (1000) ,继承于QObject类都有这个函数

2:重载void timerEvent(QTimerEvent *event)

Q_DECLARE_METATYPE关键字用法:

通过Q_DECLARE_METATYPE声明后,就可以让自定义的类型设置到QVariant。

hLay3->addStretch();,布局layout 调用addStrech的作用即是占据布局内,没有摆到控件位置,“空白处”,这样一来

将使页面不会因为控件没有摆满而显得凌乱

QT中对话框通过QDialog 来启动实现:

if(!m_pTraceEidtDlg)

{

m_pTraceEidtDlg = new PositionEdit(this);

m_pTraceEidtDlg->setModal(false); //设置是否为模态对话框启动

}

m_pTraceEidtDlg->show();

static QPoint point(m_pTraceEidtDlg->x(),m_pTraceEidtDlg->y());

m_pTraceEidtDlg->move(point);

qt forever,等同于 for(;;)

QT 多线程及防止死锁:

https://download.csdn.net/download/birenxiaofeigg/11963711

Qt movethread用法:

https://www.cnblogs.com/nanqiang/p/10818609.html

Movethread用法:

1.从QObject派生一个类,将耗时的工作写在该类的槽函数中。

2.将派生类对象移动到一个QThread中,该线程需要start。(这一步使用moveToThread)

3.通过信号连接派生类的槽函数,并通过信号触发槽函数。(槽函数在子线程中执行)

QT 也有自己的自动锁:

void CalculusThread::setDeploys(const AssumptionScene& deplays)

{

QMutexLocker lockData( &m_mutex); //加锁,函数执行完后自动解锁

m_deplays = deplays;

}

1:弹出消息库:

QMessageBox

QT 最新下载客户端

Index of /development_releases/qtcreator/5.0/5.0.0-rc1

https://download.qt.io/development_releases/qt/6.2/6.2.0-rc2/single/qt-everywhere-src-6.2.0-rc2.zip

https://download.qt.io/development_releases/qtcreator/6.0/6.0.0-rc1/qt-creator-opensource-windows-x86_64-6.0.0-rc1.exe

memset(),用来清空数组,由于不同的平台, 数据类型长度不一样,因此,正确的做法是

int dstbuffer[8];

memset(dstbuffer,0,sizeof(int)*8) ;//如果直接用memset(dstbuffer,0,8),是不对的

类应该都要加上拷贝构造函数: CTestA::CTestA(const CTestA& cat) { *this = cat; } 如此一来,便可以使用std::weak_ptr 来承接对象了: CTestA* aJoke = new CTestA(); aJoke->kName = "Hello williamszeee"; aJoke->setMat("Fully oem ding"); std::shared_ptr<CTestA> pTest = std::make_shared<CTestA>(*aJoke); std::weak_ptr<CTestA> mtest = pTest; fsPtr.reset(); //std::shared_ptr<int> fsptr<new int(5)>; if (fwPtr.expired()) //std::weak_ptr<int> fwptr=fsptr; //weak_ptr 自shared_ptr 赋值得来 { std::cout << "shared_ptr object has been destory" << std::endl; } shared_ptr<A> sp(new A()); weak_ptr<A> wp(sp); sp.reset(); // 此时sp被销毁 shared_ptr 主动销毁 通过 reset 函数 cout << wp.expired() << endl; // true表示已被销毁,否则为false

库的模式版本应该与工程的版本一致,如若不然,可能发生意想不到的异常,

比如Relaese模式下调用debug,或是Debug模式下调用release等,

如果是int,bool,double这种基础类型就不会出错,但涉及到字符串就会报异常,

就算用__stdcall也不能幸免。

std::string& trim(std::string &s)

{

if (!s.empty())

{

s.erase(0,s.find_first_not_of(" "));

s.erase(s.find_last_not_of(" ") + 1);

}

return s;

}

using namespace std;

std::string& trim(std::string &s)

{

if (!s.empty())

{

s.erase(0, s.find_first_not_of(" "));

s.erase(s.find_last_not_of(" ") + 1);

s.erase(s.find_last_not_of("\n") + 1);

s.erase(s.find_last_not_of("\r") + 1);

}

return s;

}

去除所有空格:

void trim(string &s)

{

int index = 0;

if(!s.empty())

{

while( (index = s.find(' ',index)) != string::npos)

{

s.erase(index,1);

}

}

}

C++string中find_first_not_of()函数和find_last_not_of()函数

在学习这两个函数之前建议先学C++string中find_first_of()函数和find_last_of()函数。

1、find_first_not_of()函数

正向查找在原字符串中第一个与指定字符串(或字符)中的任一字符都不匹配的字符,返回它的位置。若查找失败,则返回npos。(npos定义为保证大于任何有效下标的值。)

string str=“abcdefab”;

coutcout

2、find_last_not_of()函数

正向查找在原字符串中最后一个与指定字符串(或字符)中的任一字符都不匹配的字符,返回它的位置。若查找失败,则返回npos。(npos定义为保证大于任何有效下标的值。)

string str=“abcdefab”;

coutcout

WaitForSingleObject(m_hStateEvent, INFINITE);

std::cout

如果m_hStateEvent为空,也就是0值 时,会继续往下执行,否则会无限等待,

直到m_hStateEvent信号被激活为止

实践证明:struct 是可以在动态库中直接导出的,就像基础数据类型:int,double等数据类型那样

如何仿止线程里的无限循环发生死锁?

最好的办法是采用信号量的方式,通过连环发送信号,(初始时置信号状态为true,即为激活状态),即对于wiat_single

WaitForSingleObject(m_hStateEvent, INFINITE);

不用主动setEvent去激活,而是直接调用执行

//HANDLE m_hStateEvent;

if (m_hStateEvent == NULL)

{

m_hStateEvent = ::CreateEvent(0, false, true, 0);//初使状态便置至为true

}

C++ 基础入门:C++入门教程,C++基础教程(更新完毕)

关于动态库C++ 方式封装,

正业项目光管库作了一次重大改进,这也是来此之后的一次技术进步与收获,

动态库可以进一步封装为class类的方式:

#pragma once

#include "qxraycanutube_global.h"

#include

#include

#include

using XrayFun = std::function;

class QXRAYCANUTUBE_EXPORT QXrayCanuTube

{

public:

QXrayCanuTube() = delete;

explicit QXrayCanuTube(int comport);

void setXrayObserver(XrayFun mfun);

bool XOn();

bool XOff();

bool CheckConnect();

void SetVoltage(int kv);

void SetCurrent(int cu);

void scanPortList(std::vector& portList);

bool xTubeConnect();

void xTubeDisconnect();

private:

int _serialPort;

void* pts;

};

QXRAYCANUTUBE_EXPORT 就是一个dll import ,dll export的声明,为不至于忘记C 风格的封装,从源头上理解动态加的

封装(编译器vs2017 在安装QT VSTool 之后,新建QT库工程时,会自动生成这些关键字,而VC++本项的项目却要手动添加系列关键字),故而需要继续保留,

谈谈Debug库版本的用法注意事项:

C++ 中的库有静态和动态,同时分debug和Release版本,一般静态库只能用于Release版本,不能用于Debug模式,

也就是常说的库环境冲突,而动态库则没有这个限制,通常是以Release模式发行,但在debug和Release模式下都可

被调用,这也是相比起静态库有独到优势。

1:今天发现项目工程用的是C++14.0标准,而一些代码需要用到C++17.0或是C++20.0,那样更加简洁,效率更高,

如果将源码直接集成到项目中,则会出问题 ,导致项目出现各种各样的冲突,此时解决的最好办法是将这些新代码集成到一个库中

,而这个独立库则可以用最新C++标准去做,如此一来,动态库,或是静态库都可以,

当然最佳解决之法还是隐式def方式导出动态库方式!!!

或者这才是VC++ 的最大魅力这所在!

2: 引入windgi.h头文件之后 会报一堆异常,处理方法是添加一个宏:

_AMD64_

然后再引用 即:

#include

#include

3:关于websocketpp 的使用,需要Asio(1.2)库,boost(1.7.4+)库的配合

4: $(ProjectDir)\..\include VS 当前项目下的路径:

5:关于continue的真正用意,便是跳过当前条件,直接再次开始 循环,

std::cout

for (int i = 0; i < 100; i++)

{

if (i % 2 != 0)

{

continue; //如果不是偶数,就直接返回,从下一个i值进行,如此一来奇数便不会打印屏幕上了

}

std::cout

Sleep(1000);

}

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

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

相关文章

【JavaSE】:接口(一)

接口 一.什么是接口二.语法规则三.接口的使用四.实现多个接口五.接口的继承 final关键字 inal修饰的变量&#xff0c;这个变量是不可修改的。final修饰后的方法&#xff0c;禁止子类继承的时候重写方法。final修饰后的类&#xff0c;是禁止被继承的。 super关键字 如果父类(超类…

Proto3语法详解02

目录 1.默认值 2.更新消息 2.1更新规则 2.2保留字段reserved 2.2.1创建通讯录3.0版本---验证错误删除字段造成的数据损坏 2.3未知字段 2.3.1未知字段从哪获取 3.3.2升级通讯录3.1版本--验证未知字段 2.4前后兼容性 3.选项option 3.1选项分类 3.2常用选项列举 1.默认值…

Python之基础语法和六大数据类型

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

pg truncate

命令选项 TRUNCATE [ TABLE ] [ ONLY ] name [ * ] [, ... ][ RESTART IDENTITY | CONTINUE IDENTITY ] [ CASCADE | RESTRICT ]1.ONLY:只truncate指定的表。当表有继承子表或有子分区时&#xff0c;默认会一起truncate;only可只truncate继承父表。分区父表不能指定only --不…

vue2使用ts vue-class-component

目前&#xff0c;对于Vue3来说&#xff0c;TypeScript的支持已经相当成熟&#xff0c;但公司的老项目一直处于迭代和维护无法从v2重构成v3&#xff0c;并且重构的成本也是很大的一个问题&#xff0c;所以记录一下vue2如何去搭配TypeScript。 目录 一、脚手架创建项目 二、vu…

计算机网络:快速了解网络框架

文章目录 前言一、什么是Internet&#xff1f;1.从具体构成角度什么是协议&#xff1f; 2.从服务角度3小结 二、网络边缘1.采用网络设施面向连接服务&#xff08;TCP&#xff09;2.采用基础设施的无连接服务&#xff08;UDP&#xff09; 三、网络的核心1.电路交换2.分组交换3.分…

Android : 获取、添加、手机联系人-ContentResolver简单应用

示例图&#xff1a; MainActivity.java package com.example.mygetdata;import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat;import android.Mani…

2024 年应该使用 Bun、Node.js 还是 Deno

2024 年应该使用 Bun、Node.js 还是 Deno 到 2024 年&#xff0c;构建基于 JavaScript 的现代 API 相对简单。我们可以使用Express.js等库并在几分钟内启动可用的 API。但是&#xff0c;现在最具挑战性的部分是选择正确的 JavaScript 引擎。 目前主流的三个运行时是&#xff…

Android 单元测试初体验(二)-断言

[TOC](Android 单元测试初体验(二)-断言) 前言 当初在学校学安卓的时候&#xff0c;老师敢教学进度&#xff0c;翻到单元测试这一章节的时候提了两句&#xff0c;没有把单元测试当重点讲&#xff0c;只是说我们工作中几乎不会用到&#xff0c;果真在之前的几年工作当中我真的没…

95.STL-遍历算法 for_each

算法概述: 算法主要是由头文件 <algorithm> <functional> <numeric> 组成。 <algorithm> 是所有STL头文件中最大的一个&#xff0c;范围涉及到比较、 交换、查找、遍历操作、复制、修改等等 <numeric> 体积很小&#xff0c;只包括几个在序列上面…

第1章 爬虫基础

目录 1. HTTP 基本原理1.1 URI 和 URL1.2 HTTP 和 HTTPS1.3 请求1.3.1 请求方法1.3.2 请求的网址1.3.3 请求头1.3.4 请求体 1.4 响应1.4.1 响应状态码1.4.2 响应头1.4.3 响应体 2. Web 网页基础2.1 网页的组成2.1.1 HTML2.1.2 CSS2.1.3 JavaScript 2.2 网页的结构2.3 节点树及节…

人工智能 -- 技术概览

1、我们身处人工智能的时代 人们从早期做web开发&#xff0c;到移动端的开发&#xff1b;之后随着数据量的增大&#xff0c;人们开始研究高并发的问题&#xff1b;当数据量不断的增大&#xff0c;而人们希望数据不被浪费时&#xff0c;产生了大数据的技术&#xff0c;包括&…

正则表达式 通配符 awk文本处理工具

目录 什么是正则表达式 概念 正则表达式的结构 正则表达式的组成 元字符 元字符点&#xff08;.&#xff09; 代表字符. 点值表示点需要转义 \ r..t 代表r到t之间任意两个字符 过滤出小写 过滤出非小写 space空格 [[:space:]] 表示次数 位置锚定 例&#xff1a…

第三节HarmonyOS DevEco Studio了解基本工程目录

一、工程级目录 工程的目录结构如下。 目录详情如下&#xff1a; AppScope&#xff1a;存放应用全局所需要的资源文件。Entry&#xff1a;应用的主模块&#xff0c;存放HarmonyOS应用的代码、资源等。oh_modules&#xff1a;工程的依赖包&#xff0c;存放工程依赖的源文件。b…

Umi-OCR图片批量识别文字工具

OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/粘贴/批量导入图片&#xff0c;段落排版/排除水印&#xff0c;扫描/生成二维码。内置多国语言库。 项目地址&#xff1a;https://github.com/hiroi-sora/Umi-OCR

深度学习之图像分类(十四)CAT: Cross Attention in Vision Transformer详解

IPSA和CPSA的处理流程、维度变换细节 FLOPs的计算方法、以及flops和划分的patch数目以及patch的维度计算关系 IPSA如何进行local attention、CPSA如何进行globe attention CAT的代码详细注释---需要学习完Transformer TNT、swin transformer、crossViT CAT: Cross Atten…

C语言——打印出所有的“水仙花数”

所谓水仙花数,是指一个3位数,其各位数字立方和等于该数本身。水仙花数是指一个三位数&#xff0c;它的每个位上的数字的立方和等于它本身。例如&#xff0c;153是一个水仙花数&#xff0c;因为1^3 5^3 3^3 153。 #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>…

Scrapy爬虫异步框架(一篇文章齐全)

1、Scrapy框架初识 2、Scrapy框架持久化存储&#xff08;点击前往查阅&#xff09; 3、Scrapy框架内置管道&#xff08;点击前往查阅&#xff09; 4、Scrapy框架中间件&#xff08;点击前往查阅&#xff09; Scrapy 是一个开源的、基于Python的爬虫框架&#xff0c;它提供了…

第71讲:MySQL锁机制详解:表级锁、元数据锁和意向锁的全面解析与实践指南

MySQL中的表级锁 文章目录 MySQL中的表级锁1.MySQL中表级锁的概念2.表锁的概念以及基本使用2.1.表锁的分类以及概念2.2.表锁的使用语法2.3.表共享读锁的基本使用2.4.表独占写锁的基本使用 3.元数据锁的概念以及基本使用3.1.元数据锁的概念3.2.常见的SQL操作所对应的元数据锁3.3…

npm中的npx命令

1.概念 npx是一个执行npm软件包的二进制文件&#xff0c;通俗的讲&#xff0c;他可以执行npm的一些指令。 2.示例 用babel将ES6语法转为ES5语法 npx babel src/js -d dist/js会执行babel的相关功能&#xff0c;如果没有安装&#xff0c;也会自动安装。 当在执行npx <co…