QT基础开发笔记

news2024/11/25 15:55:15

用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.coloradmin.cn/o/1255454.html

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

相关文章

Zephyr:Direct Distillation of LM Alignment

Zephyr&#xff1a;Direct Distillation ofLM Alignment IntroductionMethod Introduction dSFT已经被可以提升模型的指令遵循能力的准确性&#xff0c;但是student model 不会超过 teacher model。 作者认为 dSFT虽然可以让模型更好的理解用户意图&#xff0c;但是无法与人类…

【笔记】小白学习电路维修

学习视频&#xff08;b站&#xff09;&#xff1a;从0开始学电路 从0开始学电路维修 p1 黄色长方体元件P2 故障率最高的元件p3带芯铜丝线圈是什么区分电感和变压器接入电路分析&#xff1a; p1 黄色长方体元件 安规电容&#xff1a;分为x y两种 位置&#xff1a;通常位于交…

[C++]指针与结构体

标题 一.指针1.指针的定义和使用2.指针所占的内存空间3.空指针与野指针4.const修饰指针5.指针和数组6.指针和函数 二.结构体1.结构体的定义与使用2.结构体数组3.结构体指针4.结构体的嵌套使用5.结构体做函数参数6.结构体中const使用场景7.案例练习 一.指针 作用: 可以通过指针…

Liunx系统使用超详细(一)

目录 一、Liunx系统的认识 二、Liunx和Windows区别 三、Liunx命令提示符介绍 四、Liunx目录结构 一、Liunx系统的认识 Linux系统是一种开源的、类Unix操作系统内核的实现&#xff0c;它基于Unix的设计原理和思想&#xff0c;并在全球范围内广泛应用。以下是对Linux系统的详…

Drools 7 JMX Mbean 及Metric 分析

Mbean mbean的打开很简单&#xff0c;使用jmx启动参数&#xff1a; -Dcom.sun.management.jmxremote.port9999 -Ddrools.mbeansenabled -Dcom.sun.management.jmxremote.authenticatefalse -Dcom.sun.management.jmxremote.sslfalse 但通过jconsole能直观看到的东西也很…

文本编辑 UTF-8 BOM 中的BOM释义

参考资料 UTF8のBOM無しとBOM付きの違いBOMなしUTF-8によってWindowsでもたらされる困惑文字コードをUTF-8 BOMなし(UTF-8N)でファイル保存をする方法 目录 一. 前提二. BOM三. CSV文件中的表现 一. 前提 在使用Windows自带的记事本编辑.csv文件的时候&#xff0c;准备保存为…

openpnp - 自动换刀设置 - 使用克隆功能降低风险

文章目录 openpnp - 自动换刀设置 - 使用克隆功能降低风险概述笔记需要注意的地方将一个做好的吸嘴作为这排其他吸嘴的模板END openpnp - 自动换刀设置 - 使用克隆功能降低风险 概述 自动换刀设置时, 很危险, 动不动就撞刀. 如履薄冰啊:( 看到openpnp在自动换刀时, 有个克隆功…

每日一练:“打家劫舍”(House Robber)问题 III

有想要了解打家劫舍初级问题的&#xff0c;可以点击下面链接查看&#xff01; 每日一练&#xff1a;“打家劫舍“&#xff08;House Robber&#xff09;问题 I   每日一练&#xff1a;“打家劫舍“&#xff08;House Robber&#xff09;问题 II 1. 问题 房屋形成一棵二叉树&…

时间序列预测 — LSTM实现单变量风电滚动预测(Keras)

目录 1 数据处理 1.1 数据集简介 1.2 数据集处理 2 模型训练与预测 2.1 模型训练 2.2 模型滚动预测 2.3 结果可视化 1 数据处理 1.1 数据集简介 实验数据集采用数据集5&#xff1a;风电机组运行数据集&#xff08;下载链接&#xff09;&#xff0c;包括风速、风向、温…

每日一题:LeetCode-LCR 143.子结构判断

每日一题系列&#xff08;day 05&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

Android之高级UI

系统ViewGroup原理解析 常见的布局容器: FrameLayout, LinearLayout,RelativeLayoout,GridLayout 后起之秀&#xff1a;ConstraintLayout,CoordinateLayout Linearlayout Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {if (mOrientation …

探索计算机视觉:深度学习与图像识别的融合

探索计算机视觉&#xff1a;深度学习与图像识别的融合 摘 要&#xff1a; 本文将探讨计算机视觉领域中的深度学习技术&#xff0c;并重点关注图像识别方面的应用。我们将介绍卷积神经网络&#xff08;CNN&#xff09;的原理、常用的图像数据集以及图像识别的实际应用场景&…

OpenWrt Lan口上网设置

LAN口上网设置 连接上openwrt&#xff0c;我用的 倍控N5105&#xff0c;eth0&#xff0c;看到Openwrt的IP是10.0.0.1 在 网络 -> 网口配置 -> 设置好 WAN 口和 LAN 口 初次使用经常重置 openwrt 所以我设置的是 静态IP模式 - 网络 -> 防火墙 -> 常规设置 ->…

机器学习【04重要】pycharm中关闭jupyter服务器

直接关掉pycharm 不行 点红方块关闭 不行 我们曲线进行 我们的方法成功截图 实现全程不在服务器上操作 首先点击下图 点击退出&#xff0c;即可 查看端口

虹科分享 | AR世界揭秘:从二维码的起源到数据识别与位姿技术的奇妙融合!

引言&#xff1a;探索AR的神奇世界&#xff0c;我们将从二维码的诞生谈起。在这个科技的海洋中&#xff0c;二维码是如何帮助AR实现数据获取与位姿识别的呢&#xff1f;让我们一起揭开这层神秘的面纱&#xff01; 一、二维码的由来 二维码是将数据存储在图形中的技术&#xff…

Linux系统的文件权限

Linux系统权限的相关概念与理解 (xshell下进行演示) 文章目录&#xff1a; 1:linux系统下两种用户 超级用户(root)与普通用户(非root)的理解root与非root用户之间切换的指令非root用户之间进行切换的指令操作 2:linux文件权限管理 文件访问者的介绍文件的类型与文件的访问权…

【SAS Planet 下载地图瓦片-读取】

SAS Planet下载地图瓦片请看上一篇 详细介绍了下载方法 【SAS Planet 下载地图瓦片】-CSDN博客 准备工作&#xff1a; 1.提前下载好地图瓦片数据 SAS Planet下载地图瓦片默认存储路径如下 默认存储格式为 .sqlitedb 2.提前准备好 java开发环境和开发工具&#xff0c;新建 一个…

Linux的基本指令(三)

目录 前言 echo指令&#xff08;简述&#xff09; Linux的设计理念 输出重定向操作符 > 追加输出重定向操作符 >> 输入重定向操作符 < 补充知识 学前补充 more指令 less指令 head指令 tail指令 查看文件中间的内容 利用输出重定向实现 利用管道“ |…

在Linux环境如何启动和redis数据库?

Linux中连接redis数据库&#xff1a; 前台启动&#xff1a; 第一步&#xff1a;redis-server:服务器启动命令 当我们启动改窗口后&#xff0c;出现如下所示&#xff1a; 该窗口就不能关闭&#xff0c;否则会出现redis无法使用的情况&#xff0c;重新打开一个窗口&#xff0c…

每日一题2023.11.26——打印沙漏【PTA】

题目要求&#xff1a; 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”&#xff0c;要求按下列格式打印 ************ *****所谓“沙漏形状”&#xff0c;是指每行输出奇数个符号&#xff1b;各行符号中心对齐&#xff1b;相邻两行符号数差2&#xff1b;…