<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[VectorAL的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/sjp1992</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sjp1992]]></copyright><item><title><![CDATA[Qt线程同步之QWaitCondition]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/140444239</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/140444239</guid><author>sjp1992</author><pubDate>Mon, 15 Jul 2024 18:09:27 +0800</pubDate><description><![CDATA[QWaitCondition允许线程告诉其他线程某种条件已经满足。一个或多个线程可以阻塞等待QWaitCondition来使用wakeOne()或wakeAll()设置条件。使用wakeOne()唤醒一个随机选择的线程或wakeAll()唤醒所有线程。QWaitCondition同样可以使多个线程同时访问同一资源，比单纯使用互斥锁的效率更高，类似于QSemaphore。]]></description><category></category></item><item><title><![CDATA[Qt线程同步之QSemaphore]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/140438119</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/140438119</guid><author>sjp1992</author><pubDate>Mon, 15 Jul 2024 17:09:00 +0800</pubDate><description><![CDATA[QMutex，QMutexLocker，QReadWriteLocker，QReadLocker，QWriteLocker，QSemaphore，QWaitCondition信号量是互斥锁的扩展。互斥锁只能锁定一次，但信号量可以多次获取。
信号量通常用于保护一定数量的相同资源。信号量具有比互斥锁更高的并发性。以生产者消费者问题举例，如果对缓冲区的访问由OMutex保护，则消费者线程不能与生产者线程同时访问缓冲区。然而让两个线程同时在缓冲区的不同部分工作并不会产生问题，使用信号量可以实现让生产者和消费者同时操]]></description><category></category></item><item><title><![CDATA[C++ 指针变量做参数传递时的情况分析]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/140380594</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/140380594</guid><author>sjp1992</author><pubDate>Fri, 12 Jul 2024 17:46:29 +0800</pubDate><description><![CDATA[指针变量作为参数传递时，很容易混淆指针本身和指针指向的内容，实际应用中可能会导致无法预料的问题，所以做一下详细分析。]]></description><category></category></item><item><title><![CDATA[C++多态中的构造函数和析构函数]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/140354211</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/140354211</guid><author>sjp1992</author><pubDate>Thu, 11 Jul 2024 16:39:42 +0800</pubDate><description><![CDATA[构造函数可以是虚函数吗？答：构造函数不可以是虚函数。原因：构造对象时必须知道对象的实际类型，但是虚函数调用在运行时才能确定对象的实际类型，这会导致编译器无法确定对象的具体类型。虚函数的执行依赖于虚函数表（vtable），虚函数表在构造函数中进行初始化工作，即初始化vptr（指向虚函数表的指针）。在构造对象期间，虚函数表还没有被初始化，因此无法通过虚函数表来调用构造函数。析构函数可以是虚函数吗？答：作为父类时，析构函数必须是虚函数。]]></description><category></category></item><item><title><![CDATA[Linux下qt使用tcmalloc]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/140319649</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/140319649</guid><author>sjp1992</author><pubDate>Wed, 10 Jul 2024 11:47:37 +0800</pubDate><description><![CDATA[无论是在游戏开发，或者其他长期运行的服务开发中，对内存的使用一直是架构师或者主程序在最初就要关注的point，如果内存使用不当，频繁申请释放内存造成系统负担过大，性能降低，到最后产生大量内存碎片，无法申请可利用内存，最终宕机，给广大程序员同学造成长期加班的痛苦。]]></description><category></category></item><item><title><![CDATA[多线程场景下，使用QEventLoop使界面不卡顿的同时过滤用户输入]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/140303399</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/140303399</guid><author>sjp1992</author><pubDate>Tue, 09 Jul 2024 19:28:57 +0800</pubDate><description><![CDATA[有耗时的操作需要放到子线程中处理，但是此过程中不允许界面执行其他操作，不能使用阻塞界面的模态对话框实现。可以通过QEventLoop在子线程执行的同时开启一个事件循环，使UI界面不卡顿，能够正常响应。但是这种不卡顿只是鼠标滑动时UI可以流畅的变化，界面没有变成卡顿状态，此时不会执行鼠标点击或者键盘输入等用户输入的事件，否则会影响子线程中正在执行的操作。]]></description><category></category></item><item><title><![CDATA[QProgressDialog 在进度条达到最大值时自动关闭，屏蔽esc和cancel按钮]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/140298422</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/140298422</guid><author>sjp1992</author><pubDate>Tue, 09 Jul 2024 17:41:03 +0800</pubDate><description><![CDATA[QProgressDialog 默认会在进度达到设定的最大值时自动关闭。setAutoReset()设置为false或setAutoClose()设置为false时对话框无法自动关闭。]]></description><category></category></item><item><title><![CDATA[Qt读写Excel文件（QAxObject）]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/125887164</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/125887164</guid><author>sjp1992</author><pubDate>Wed, 20 Jul 2022 13:11:23 +0800</pubDate><description><![CDATA[Qt读写Excel文件（QAxObject）]]></description><category></category></item><item><title><![CDATA[linux 判断网络是否连接正常]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/124680504</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/124680504</guid><author>sjp1992</author><pubDate>Tue, 10 May 2022 09:15:32 +0800</pubDate><description><![CDATA[#define LAN_PATH    "/sys/class/net/eth0/carrier"  // 有线网络节点
#define WLAN_PATH    "/sys/class/net/wlan0/carrier"  // 无线网络节点

/*******************************************************************
** 函数名:     getNetworkStatus
** 函数描述:   获取当前的网络连接情况
** 参数:    ]]></description><category></category></item><item><title><![CDATA[Qt MinGW编译CyAPI源码生成静态库，使用方法及测试]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/121496133</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/121496133</guid><author>sjp1992</author><pubDate>Tue, 23 Nov 2021 16:38:49 +0800</pubDate><description><![CDATA[1. 前言
之前写了如何使用Qt mingw编译CyAPI源码生成静态库，Qt MinGW编译CyAPI源码生成静态库
今天写一下使用方法和测试过程。
2. 使用
2.1 将准备好的静态库和头文件拷贝到工程目录下，或者放到自定义的目录下，我的目录结构：

2.2 新建Qt工程，在项目文件（.pro文件）中加入以下内容：
我的库和头文件都在工程目录下，所以此处配置路径如下，如果自己修改了路径直接在此处修改即可。或者右键项目添加外部静态库，选择库和头文件目录。
LIBS += -L$$PWD/ -lCyAPIM]]></description><category></category></item><item><title><![CDATA[Qt MinGW编译CyAPI源码生成静态库，支持32位，64位编译]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/121491910</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/121491910</guid><author>sjp1992</author><pubDate>Tue, 23 Nov 2021 15:06:21 +0800</pubDate><description><![CDATA[一、前言
最近需要做Windows平台 + Qt MinGW编译器做上位机与USB通信，USB芯片使用Cypress芯片。试了libusb，只能在Linux平台下使用，Windows平台用不了。所以只能使用Cypress提供的官方库CyAPI，但是Cypress官网只提供了vs版本的源码编译，在Qt下使用需要重新编译，苦于没有找到现成的资源只能自己编译，搞了一天，不过真心不难，只是没有注意细节。在此记录一下编译过程，也分享给需要的小伙伴。
二、 准备
需要准备好CyAPI源码，我是在官网下载的
官网下载地址]]></description><category></category></item><item><title><![CDATA[Qt pro项目文件 判断编译器版本（64 位或 32位），以及设置生成及输出文件路径]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/121491605</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/121491605</guid><author>sjp1992</author><pubDate>Tue, 23 Nov 2021 13:56:37 +0800</pubDate><description><![CDATA[Qt pro项目文件设置
greaterThan(QT_MAJOR_VERSION,4){
        TARGET_ARCH=$${QT_ARCH}
}else{
        TARGET_ARCH=$${QMAKE_HOST.arch}
}
contains(TARGET_ARCH, x86_64){
    CONFIG(debug,debug|release){
        MOC_DIR = build/x64/tmp_debug/moc
        RCC_DIR = build]]></description><category></category></item><item><title><![CDATA[大小端模式的判断方法]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/120040247</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/120040247</guid><author>sjp1992</author><pubDate>Wed, 01 Sep 2021 15:46:11 +0800</pubDate><description><![CDATA[1. 大小端模式
大端模式：数据的高字节存储在内存的低地址中。
小端模式：数据的低字节存储在内存的低地址中。
两种模式的区别就是数据在内存中是先存储高字节还是低字节，先存高字节就是大端模式，先存低字节就是小端模式。
为什么会有小端字节序？
答案是，计算机电路先处理低位字节，效率比较高。因为计算都是从低位开始处理，所以计算机的内部处理都是小端字节序。计算机读取数据时从低地址开始读。
但是，人类还是习惯读写大端字节序。所以，除了计算机的内部处理，其他的场合几乎都是大端字节序，比如网络传输和文件储存。
例如：
3]]></description><category></category></item><item><title><![CDATA[Qt信号和槽连接方式测试]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/120038895</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/120038895</guid><author>sjp1992</author><pubDate>Wed, 01 Sep 2021 14:47:04 +0800</pubDate><description><![CDATA[Qt信号和槽的连接方式
1. 常用的连接方式
Qt::ConnectionType代表信号和槽的连接方式，在connect时指定。

Qt::AutoConnection	：缺省的默认方式，如果接收者位于发出信号的线程中，则使用Qt::DirectConnection。否则，将使用Qt::QueuedConnection。连接类型在发出信号时确定。
Qt::DirectConnection：当发出信号时，将立即调用槽函数。槽函数在发送信号的线程中执行。
Qt::QueuedConnection：当控制权返回]]></description><category></category></item><item><title><![CDATA[QtStyleSheet Qt常用控件样式表查看工具]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/119936595</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/119936595</guid><author>sjp1992</author><pubDate>Thu, 26 Aug 2021 17:45:37 +0800</pubDate><description><![CDATA[1. 前言
项目需要用到样式表设置界面，但是写样式表的时候没办法即时查看效果，很不方便，所以做了一个小工具，支持实时修改样式表并即时查看样式表效果，支持几个常用的Qt控件。

2. 注意事项

subcontrol-origin 有 4 个值可选：
margin
border
padding
content

subcontrol-position 水平方向有 3 个值可选：
left
center
right
subcontrol-position 垂直方向有 3 个值可选：
top
center
bot]]></description><category></category></item><item><title><![CDATA[Qt Model/View 自定义代理（五）： 使用代理给QTableView单元格添加按钮QPushButton]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/119874504</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/119874504</guid><author>sjp1992</author><pubDate>Mon, 23 Aug 2021 17:54:21 +0800</pubDate><description><![CDATA[Qt Model/View 自定义代理（五）： 使用代理给QTableView单元格添加按钮QPushButton
效果图：

构造函数中传入按钮列表，即可添加多个按钮，可设置按钮样式表，使用信号槽连接按钮事件。
1. 头文件
#include &lt;QObject&gt;
#include &lt;QPushButton&gt;
#include&lt;QStyledItemDelegate&gt;

class QMyTableViewBtnDelegate: public QStyledItemDe]]></description><category></category></item><item><title><![CDATA[QList 和 QVector 的区别，和使用注意事项]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/119784803</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/119784803</guid><author>sjp1992</author><pubDate>Wed, 18 Aug 2021 17:58:41 +0800</pubDate><description><![CDATA[QList 和 QVector
来自Qt官方文档和Effective Qt

QList&lt;T&gt;、QLinkedList&lt;T&gt;和QVector&lt;T&gt;提供了类似的API和功能。它们通常是可互换的，但会对性能产生影响。
QVector应该是默认的第一选择。 QVector&lt;T&gt;通常比QList&lt;T&gt;提供更好的性能，因为QVector&lt;T&gt;总是在内存中顺序存储其项，
其中QList&lt;T&gt;在堆上分配其项，除非sizeof(T) &lt]]></description><category></category></item><item><title><![CDATA[Qt容器类]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/119781531</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/119781531</guid><author>sjp1992</author><pubDate>Wed, 18 Aug 2021 17:14:18 +0800</pubDate><description><![CDATA[1. 容器类概述
Qt提供了多个基于模板的容器类，Qt的容器类比标准模板库（STL）中的容器类更轻巧、安全、易于使用。这些容器类是隐式共享和可重入的，它们进行了速度和存储优化，因此可以减少可执行文件的大小。此外，它们还是线程安全的，也就是说它们作为只读容器时可被多个线程访问。
Qt的容器类分为顺序容器（sequential containers）和关联容器（associative containers）。
容器迭代类用于遍历容器里的数据项，有Java类型的迭代类和STL类型的迭代类。Java类型的迭代类易于]]></description><category></category></item><item><title><![CDATA[Qt中对文件的拷贝删除重命名等操作]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/119774725</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/119774725</guid><author>sjp1992</author><pubDate>Wed, 18 Aug 2021 10:34:33 +0800</pubDate><description><![CDATA[1.删除指定路径的文件.
//删除文件.返回一个bool值,判断是否成功删除,如果路径不存在这些,则返回false.
QFile file("c:/users/administrator/desktop...");
bool ok = file.remove();
//因为QFile::remove()是个静态方法,可以直接调用.
bool ok = QFile::remove("c:/users/administrator/desktop...");

2.给指定文件重命名
QFile file("c:/]]></description><category></category></item><item><title><![CDATA[Qt Model/View 模型视图框架]]></title><link>https://blog.youkuaiyun.com/sjp1992/article/details/119648912</link><guid>https://blog.youkuaiyun.com/sjp1992/article/details/119648912</guid><author>sjp1992</author><pubDate>Fri, 13 Aug 2021 14:33:14 +0800</pubDate><description><![CDATA[1. Model/View基本原理

]]></description><category></category></item></channel></rss>