- 博客(55)
- 资源 (11)
- 收藏
- 关注
转载 linux 判断网络是否连接正常
#define LAN_PATH "/sys/class/net/eth0/carrier" // 有线网络节点#define WLAN_PATH "/sys/class/net/wlan0/carrier" // 无线网络节点/********************************************************************* 函数名: getNetworkStatus** 函数描述: 获取当前的网络连接情况** 参数:
2022-05-10 09:15:32 2450
原创 Qt MinGW编译CyAPI源码生成静态库,使用方法及测试
1. 前言之前写了如何使用Qt mingw编译CyAPI源码生成静态库,Qt MinGW编译CyAPI源码生成静态库今天写一下使用方法和测试过程。2. 使用2.1 将准备好的静态库和头文件拷贝到工程目录下,或者放到自定义的目录下,我的目录结构:2.2 新建Qt工程,在项目文件(.pro文件)中加入以下内容:我的库和头文件都在工程目录下,所以此处配置路径如下,如果自己修改了路径直接在此处修改即可。或者右键项目添加外部静态库,选择库和头文件目录。LIBS += -L$$PWD/ -lCyAPIM
2021-11-23 16:38:49 1811 29
原创 Qt MinGW编译CyAPI源码生成静态库,支持32位,64位编译
一、前言最近需要做Windows平台 + Qt MinGW编译器做上位机与USB通信,USB芯片使用Cypress芯片。试了libusb,只能在Linux平台下使用,Windows平台用不了。所以只能使用Cypress提供的官方库CyAPI,但是Cypress官网只提供了vs版本的源码编译,在Qt下使用需要重新编译,苦于没有找到现成的资源只能自己编译,搞了一天,不过真心不难,只是没有注意细节。在此记录一下编译过程,也分享给需要的小伙伴。二、 准备需要准备好CyAPI源码,我是在官网下载的官网下载地址
2021-11-23 15:06:21 2217 7
原创 Qt pro项目文件 判断编译器版本(64 位或 32位),以及设置生成及输出文件路径
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
2021-11-23 13:56:37 3838
原创 大小端模式的判断方法
1. 大小端模式大端模式:数据的高字节存储在内存的低地址中。小端模式:数据的低字节存储在内存的低地址中。两种模式的区别就是数据在内存中是先存储高字节还是低字节,先存高字节就是大端模式,先存低字节就是小端模式。为什么会有小端字节序?答案是,计算机电路先处理低位字节,效率比较高。因为计算都是从低位开始处理,所以计算机的内部处理都是小端字节序。计算机读取数据时从低地址开始读。但是,人类还是习惯读写大端字节序。所以,除了计算机的内部处理,其他的场合几乎都是大端字节序,比如网络传输和文件储存。例如:3
2021-09-01 15:46:11 4335
原创 Qt信号和槽连接方式测试
Qt信号和槽的连接方式1. 常用的连接方式Qt::ConnectionType代表信号和槽的连接方式,在connect时指定。Qt::AutoConnection :缺省的默认方式,如果接收者位于发出信号的线程中,则使用Qt::DirectConnection。否则,将使用Qt::QueuedConnection。连接类型在发出信号时确定。Qt::DirectConnection:当发出信号时,将立即调用槽函数。槽函数在发送信号的线程中执行。Qt::QueuedConnection:当控制权返回
2021-09-01 14:47:04 851
原创 QtStyleSheet Qt常用控件样式表查看工具
1. 前言项目需要用到样式表设置界面,但是写样式表的时候没办法即时查看效果,很不方便,所以做了一个小工具,支持实时修改样式表并即时查看样式表效果,支持几个常用的Qt控件。2. 注意事项subcontrol-origin 有 4 个值可选:marginborderpaddingcontentsubcontrol-position 水平方向有 3 个值可选:leftcenterrightsubcontrol-position 垂直方向有 3 个值可选:topcenterbot
2021-08-26 17:45:37 673
原创 Qt Model/View 自定义代理(五): 使用代理给QTableView单元格添加按钮QPushButton
Qt Model/View 自定义代理(五): 使用代理给QTableView单元格添加按钮QPushButton效果图:构造函数中传入按钮列表,即可添加多个按钮,可设置按钮样式表,使用信号槽连接按钮事件。1. 头文件#include <QObject>#include <QPushButton>#include<QStyledItemDelegate>class QMyTableViewBtnDelegate: public QStyledItemDe
2021-08-23 17:54:21 7526 11
原创 QList 和 QVector 的区别,和使用注意事项
QList 和 QVector来自Qt官方文档和Effective QtQList<T>、QLinkedList<T>和QVector<T>提供了类似的API和功能。它们通常是可互换的,但会对性能产生影响。QVector应该是默认的第一选择。 QVector<T>通常比QList<T>提供更好的性能,因为QVector<T>总是在内存中顺序存储其项,其中QList<T>在堆上分配其项,除非sizeof(T) <
2021-08-18 17:58:41 8618
原创 Qt容器类
1. 容器类概述Qt提供了多个基于模板的容器类,Qt的容器类比标准模板库(STL)中的容器类更轻巧、安全、易于使用。这些容器类是隐式共享和可重入的,它们进行了速度和存储优化,因此可以减少可执行文件的大小。此外,它们还是线程安全的,也就是说它们作为只读容器时可被多个线程访问。Qt的容器类分为顺序容器(sequential containers)和关联容器(associative containers)。容器迭代类用于遍历容器里的数据项,有Java类型的迭代类和STL类型的迭代类。Java类型的迭代类易于
2021-08-18 17:14:18 1262
转载 Qt中对文件的拷贝删除重命名等操作
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:/
2021-08-18 10:34:33 5438
原创 Qt Model/View自定义代理
QTableView使用自定义代理效果图:代码目录QTableView 自定义代理(一):基于QComboBox 的下拉框代理类QTableView自定义代理(二):基于QSpinBox的自定义代理类,输入int类型的值QTableView自定义代理(三):基于QDoubleSpinBox的自定义代理类,输入双精度double类型的值QTableView自定义代理(四):只读代理持续更新…...
2021-08-12 15:41:08 702
原创 QTableView自定义代理(四):只读代理
QTableView自定义代理(四):只读代理项目中遇到table view整体设置为双击编辑item( ui->tableView->setEditTriggers(QTableView::DoubleClicked); ),但是有些行或者列不可以编辑,这时通过只读代理设置就比较方便。tableview缺省代理是一个QLineEdit,所以只需要将创建编辑器的操作屏蔽掉就可以了。代码:class QMyReadOnlyDelegate: public QItemDelegate{
2021-08-12 15:15:29 816
原创 QTableView自定义代理(三):基于QDoubleSpinBox的自定义代理类,输入双精度double类型的值
QTableView自定义代理(三):基于QDoubleSpinBox的自定义代理类头文件#include <QStyledItemDelegate>class QMyDoubleSpinDelegate : public QStyledItemDelegate{ Q_OBJECTpublic: QMyDoubleSpinDelegate (QObject *parent=0);//自定义代理组件必须继承以下4个函数 //创建编辑组件 QWid
2021-08-12 14:49:43 558
原创 QTableView自定义代理(二):基于QSpinBox的自定义代理类,输入int类型的值
QTableView自定义代理(二):基于QSpinBox的自定义代理类头文件#include <QStyledItemDelegate>class QMyIntSpinDelegate : public QStyledItemDelegate{ Q_OBJECTpublic: QMyIntSpinDelegate (QObject *parent=0);//自定义代理组件必须继承以下4个函数 //创建编辑组件 QWidget *cre
2021-08-12 14:41:36 510
原创 QTableView 自定义代理(一):基于QComboBox 的下拉框代理类
QTableView 自定义item delegate,单元格下拉框代理。头文件#include <QStyledItemDelegate>class QMyComboBoxDelegate: public QStyledItemDelegate{ Q_OBJECTpublic: QMyComboBoxDelegate(QObject *parent=0);//自定义代理组件必须继承以下4个函数 //创建编辑组件 QWidget *creat
2021-08-12 14:22:27 3045
原创 Qt网络-UDP组播(三)
1. UDP组播特性UDP组播是主机之间 " 一对一组 " 的通信模式,当多个客户端加入由一个组播地址定义的多播组之后,客户端向组播地址和端口发送的UDP数据报,组内成员都可以接收到。用同一个IP多播地址接收多播数据报的所有主机构成了一个组,称为多播组(或组播组)。所有的信息接收者都加入到一个组内,加入之后,流向组地址的数据报开始向接收者传输,组中的所有成员都能接收到数据报。组中的成员是动态的,主机可以在任何时间加入和离开组。采用UDP组播必须使用一个组播地址。组播地址(组播报文的目的地址
2021-08-09 15:22:42 7010 6
原创 Qt网络-UDP,QUdpSocket,单播和广播程序实现(二)
核心代码1. 绑定端口要接收UDP数据报,必须绑定一个端口,来监听数据传入。//绑定端口void bindPort(){ quint16 port = ui->spinBindPort->value(); // 本机UDP端口 if (udpSocket->bind(port)) // 绑定端口成功 { ui->plainTextEdit->appendPlainText("**已成功绑定"); ui->p
2021-08-06 17:31:04 1663
原创 Qt网络-UDP概述(一)
1. UDP概述UDP是轻量的、不可靠的、面向数据报的、无连接的协议,通常用于对可靠性要求不高、对速度要求较高的场合。相对于TCP通信,UDP通信不需要事先建立socket连接,UDP每次发送数据都需要指定目标地址和端口。UDP以数据报传输数据,而不是以连续的数据流。数据报大小一般小于512字节,每个数据包包含发送者和接收者的IP地址和端口等信息。2. UDP通信三种模式单播(unicast)模式:一个UDP客户端发出的数据报只发送到另一个指定IP地址和端口的UDP客户端,一对一传输。广播(bro
2021-08-06 16:58:59 544
原创 Qt网络-TCP,实现服务器、客户端传递文本消息和文件(二)
原理接上篇:Qt网络-TCP,实现服务器、客户端传递文本消息和文件(一)程序效果1. 主要功能:TCP方式建立连接,实现服务器和客户端互发消息,文件传输只实现了单向传输,客户端向服务器传送文件,但是从服务器向客户端传文件原理也是一样的,代码都有,实现起来也简单,我这里就不实现了,这篇博客主要是了解传输原理和流程,了解如何传输数据,还可以增加是否接收文件等等很多功能,可以根据需要自己尝试实现,了解了传输过程,什么功能都可以做。2. 程序里文本消息和文件传输分别用了两个socket,这样在传输大文件的时
2021-08-06 15:40:19 3691 18
原创 Qt网络-TCP,实现服务器、客户端传递文本消息和文件(一)
注意:本章只有概念概述,代码在下一章程序图示1. TCP概述TCP是可靠的、面向流、面向连接的传输协议,适合用于连续数据传输。TCP通信必须建立TCP连接,分为客户端和服务端。Qt提供了QTcpSocet和QTcpServer用于建立TCP通信服务。服务段需要使用QTcpServer建立端口监听,QTcpSocket用于连接建立后使用套接字socket进行通信。2. QTcpServer类常用函数void close()停止监听,关闭服务器QString errorString()
2021-08-06 15:18:58 2783
原创 Qt单例类模板,继承自QObject的类使用,方便复用,自动垃圾回收
1. Qt使用标准c++单例类模板出现的问题之前写过一篇c++单例类模板,但是那个只适用于标准c++的类。在Qt中使用时遇到了问题。我的使用场景:有些界面参数配置或者内容需要全局访问或者要在多个地方显示,但是所有地方需要保持数据的一致性,所以使用单例保证进程全局只有一个实例。但是Qt的界面类顶层都是继承自QObject的,界面一旦被设置了parent之后,对象的控制权便交给了Qt,由Qt做内存管理。界面关闭的时候,Qt会自动按照父子顺序来销毁界面实例,也就是我的单例界面实例内存被系统回收,但是地址不为空
2021-07-30 12:03:33 1816 2
原创 c++单例类模板,方便复用,自动垃圾回收
1. 单例模式单例模式的要点有三个:某个类只能有一个实例;它必须自行创建这个实例;它必须自行向整个系统提供这个实例。从具体实现角度来说,就是以下三点:单例模式的类只提供私有的构造函数,私有化拷贝构造函数和赋值操作符防止复制类定义中含有一个该类的静态私有对象该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。2. 单例需不需要释放单例模式所提供的实例是new出来的,分配在堆中,不会自动释放,需要手动释放。3. 单例类模板实现#include <mutex&g
2021-07-30 11:15:19 469
转载 总结一下Qt内存泄漏检测与处理策略
转载,原文链接:https://blog.csdn.net/libaineu2004/article/details/106771500如果时间急迫,不想看完整文章,可以直接去到文章末尾,看结论。有我个人写的C++单例类,用于内存自动释放。1、QtCreator编写C++代码,怎么检测内存泄漏?请参见本人的另一篇博文:https://blog.csdn.net/libaineu2004/article/details/1040716272、Qt中控件new之后需不需要delete的问题https:
2021-07-30 10:11:57 4198 1
原创 QList 使用注意-at(),[],value()的区别及使用场景
QList 使用注意—at(),operator[],value()的区别及使用场景以前经常使用operator[]和at(),用来查找元素的值。前几天遇到了一个问题,结构体嵌套存储了QList成员,但是无法改变QList元素的值,这才对这几个函数做了详细的了解。T QList::value(int i) const 返回指定位置i处的值如果索引i超出界限,则函数返回一个默认的构造值。如果确定索引值在边界内,则可以使用at(),at()速度稍快。返回值T,相当于返回了一个复制,使用value(i)
2021-07-27 18:02:07 7937 2
原创 QTreeView+QAbstractItemModel,自定义model,支持拖拽
效果图1、QAbstractItemModel 简单介绍Header: #include <QAbstractItemModel>qmake: QT += core继承自: QObject子类: QAbstractListModel, QAbstractProxyModel, and QAbstractTableModelQAbstractItemModel 类定义了item model必须使用的标准接口,以便能够与model/view体系结构中的其他组件进行交互。它不应该被
2021-07-21 11:06:24 4998
翻译 Qt 拖放事件 drag drop
Qt在部件中进行拖放Qt中的拖放支持以QDrag为中心,拖放操作的大部分细节由该类处理。除了创建QDrag对象外,还需要重新实现dragMoveEvent()来接受事件和dropEvent()处理部件上的数据。最终DragEnterEvent()需要重新实现才能接受事件。在处理拖放操作的控件上,还需要调用setAcceptDrops(true);代码实现:mydialog.hclass MyDialog : public QDialog{ Q_OBJECTpublic:
2021-07-09 11:42:03 851
翻译 QTableWidget编辑单元格内容,按下回车键使焦点转到下一个单元格
编辑QTableWidget单元格内容按回车键后,使焦点从当前单元格转到下一个单元格。先上效果:方法:为了在按Enter键时使焦点从表中的一个单元格转到下一个单元格,可以重新实现代理的eventFilter(),并监听键盘事件:QEvent::KeyPress 代码实现:class MyItemDelegate : public QStyledItemDelegate{ Q_OBJECTpublic: MyItemDelegate(QObject *parent = null
2021-07-09 10:43:15 4364 4
原创 QMap常用用法
QMap的常用函数1. iterator QMap::erase(iterator pos)从映射中移除迭代器pos指向的(键、值)对,并将迭代器返回到映射中的下一项。2. int QMap::remove(const Key &key) 从映射中删除所有具有密钥的项。返回删除的项数,通常为1,但如果该键不在映射中,则返回0; 如果已将insertMulti()用于该键,则返回大于1。3. bool QMap::contains(const Key &key) const如
2021-07-08 18:01:30 5499
转载 QSS字体
css,qss font-family常用的黑体宋体等字体中英文对照当qss使用中文设置字体时,无法生效。因为qss不支持中文设置字体,所以下面给出一些常用的黑体宋体字体中英文对照。微软雅黑: Microsoft YaHei宋体:SimSun黑体:SimHei仿宋: FangSong楷体: KaiTi隶书:LiSu幼圆:YouYuan华文细黑:STXihei华文楷体:STKaiti华文宋体:STSong华文中宋:STZhongsong华文仿宋:STFangsong方正舒体:FZ
2021-06-30 09:43:27 1680
原创 银河麒麟桌面版忘记用户密码后遇到的问题以及解决过程
银河麒麟忘记用户密码解决过程解决办法重启系统,进入编辑模式修改用户密码解决步骤1. 开机等待界面按”e“进入编辑模式2. 进入编辑模式后,按键盘”↓“到底部,找到下面内容:注:上图中的”ro“处,有的同学可能是”rw“,后面会讲到。3. 按下图修改两处内容:修改ro为rw行尾添加init=/bin/bash如果”ro“处本来就是”rw“,那么可以忽略第一步。如果不修改为”rw“那么后面修改密码的时候会报错,无法成功修改密码。报错如下:passwd: Authenticati
2021-05-27 15:48:35 21542 1
原创 acos() 返回nan的问题
acos()函数描述C 库函数 double acos(double x) 返回以弧度表示的 x 的反余弦。声明:double acos(double x)参数:x – 介于 [-1,1] 区间的浮点值。返回值:该函数返回以弧度表示的 x 的反余弦,弧度区间为 [0, pi]。问题及原因分析acos(temp)返回nan,temp的值输出为-1,原因应该与精度有关,temp的值接近-1,但是小于-1,所以出错。解决办法将temp值控制在[-1,1]区间内:acos(fminl(fmaxl
2021-05-26 16:59:30 2420
原创 Qt线程安全和可重入
在整个文档中,术语可重入和线程安全用于标记类和函数,以指示如何在多线程应用程序中使用它们:线程安全函数可以从多个线程同时调用,即使调用使用共享数据,因为对共享数据的所有引用都是序列化的。可重入函数也可以从多个线程同时调用,但前提是每次调用都使用自己的数据。因此,线程安全函数总是可重入的,但可重入函数并不总是线程安全的。通过扩展,如果一个类的成员函数可以从多个线程安全地调用,只要每个线程使用一个不同的类实例,那么这个类就是可重入的。如果可以从多个线程安全地调用类的成员函数,则该类是线程安全的,即使所有
2021-05-21 15:41:28 402
原创 Qt信号和槽的连接方式,connect第五个参数Qt::ConnectionType
Qt信号和槽的连接方式enum Qt::ConnectionType描述可在信号和槽之间使用的连接类型。特别地,它确定一个特定的信号是立即传递给槽还是排队等待稍后传送。ConstantValueDescriptionQt::AutoConnection0默认方式,如果接收者位于发出信号的线程中,则使用Qt::DirectConnection。否则,将使用Qt::QueuedConnection。连接类型在发出信号时确定。Qt::DirectConnection1当发
2021-05-21 15:03:13 575
原创 数组越界问题
首先,分析以下C语言代码的运行结果:int main(int argc, char* argv[]){ int i = 0; int arr[3] = {0}; for(; i<=3; i++){ arr[i] = 0; printf("hello world\n"); } return 0;}我们想要的结果是打印三行hello world,但是以上代码实际的运行结果是编译成功,无限循环打印"hello world"。代
2021-02-25 13:57:59 1156
原创 虚拟内存空间
虚拟内存空间每一个进程都会对应一个虚拟地址空间,32位操作系统会为每个进程分配4G(2的32次方)的虚拟地址空间,而MMU(Memory Management Unit,内存管理单元)负责把这4G虚拟内存映射到实际的物理内存中。这4G空间分为用户空间和内核空间两部分。Windows系统下,用户空间和内核空间以2:2比例划分,Linux系统下用户空间和内核空间以3:1划分。内核空间由所有进程共享,用户空间各自独立,程序是无法直接访问内核空间的。 虚拟地址空间分布如下图所示(以Linux系统为例): (64位
2021-02-25 11:19:31 2761 6
原创 Ubuntu18.04搭建本地RTMP服务器librtmp+nginx,推送flv文件播放
Ubuntu18.04搭建本地RTMP服务器librtmp+nginx1.依赖:openssl,zlib2.安装依赖apt-get install libssl-devapt-get install zlib1g-dev3.编译安装librtmpgit clone git://git.ffmpeg.org/rtmpdumpcd rtmpdump/makemake installmake过程中可能会报错,一些变量或者结构体未定义或者未引用的问题,类似以下情况:出现上述问题的原因是o
2020-10-19 16:07:31 920
原创 Ubuntu下使用ffmpeg调用设备摄像头采集视频,使用libx264编码视频,保存h264文件
Ubuntu下使用ffmpeg调用设备摄像头采集视频,使用libx264编码视频,保存h264文件主要流程代码:#define V_WIDTH 640#define V_HEIGHT 480void MainWindow::rec_video(){ AVFormatContext *fmt_ctx = NULL; AVPacket packet; AVCodecContext *enc_ctx = NULL; AVFrame *frame = NULL;
2020-10-17 22:03:18 1665 8
QStyleSheetTool.zip
2021-08-26
qttest_drag_drop.zip
2021-07-09
QTableWidget编辑单元格内容,按下回车键使焦点转到下一个单元格
2021-07-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人