C++
云胡同学
GitHub 地址:https://github.com/stevenling
微信公众号:yunhu_123
展开
-
C++ Vector 易错点
一、概述vector 的 resize() 函数会分配一个大小,这时候使用 push_back() 函数会在尾部进行添加。二、分析2.1 代码#include <iostream>#include <vector>using namespace std;int main(){ vector<int> a; a.clear(); a.resize(5); for(int i = 0; i < 5; i++) { a.push_back(原创 2022-04-18 17:51:44 · 1151 阅读 · 0 评论 -
C++ 类型转换
int 转 stringint i = 10;string str = to_string(i);string 转 const char *string fileName = "yunhu.txt"const char * dealFileName = fileName.c_str();原创 2021-05-28 11:26:38 · 89 阅读 · 0 评论 -
Qt 控件自适应 windows 不同缩放程度
概述在公司台式机上开发的 Qt 软件,发送给自己的笔记本电脑发现控件乱了,以为是布局问题。后面发现是笔记本电脑的缩放设置是 125%。查看方式是「设置」–> 「系统」–> 「显示」缩放不同会导致控件乱掉,因此要去自适应 windows 的缩放。解决方法添加资源文件添加文件资源添加后,右键 qrc 文件,选择 Add Prefix 输入 /qt然后在本地项目中新建一个 etc 的文件夹,文件夹底下新建一个 qt.conf 的文件。qt.conf 文件的内容是[Plat原创 2021-03-30 15:38:19 · 2742 阅读 · 17 评论 -
Qt QTableView 基本使用
概述QTableView 的常规操作函数设置是否显示行列表头m_tableView = ui->tableView;m_tableView ->horizontalHeader()->setVisible(true); // 显示行表头m_tableView ->verticalHeader()->setVisible(false); // 不显示列表头设置行表头内容m_model = new QStandardItemModel()原创 2021-03-11 10:57:47 · 1404 阅读 · 2 评论 -
Qt 获取本地 IPv4 地址和对应的广播地址
概述项目需要使用 UDP 进行广播,因此要获取本地的广播地址。代码void GetIpAndBroadcast(){ foreach (QNetworkInterface netInterface, QNetworkInterface::allInterfaces()) { QList<QNetworkAddressEntry> entryList = netInterface.addressEntries(); //遍历每一个IP地址原创 2021-03-11 10:12:33 · 1070 阅读 · 2 评论 -
Qt 在 QTabWidget 的一个 tab 页上绘制图形
描述想在一个 tab 页上调用 paintEvent 绘制图形。步骤新建一个类继承 QWidget 然后与 tab 页绑定到一起,在 ui 上右键 tab 页,选择提升为,然后输入新建的子类名称。在 paintEvent 中绘制图形代码class PainterArea : public QWidget{protected: /// @brief 重画事件 void paintEvent(QPaintEvent *) override;}这边重写了基类 QWidge原创 2021-03-08 14:45:19 · 1233 阅读 · 0 评论 -
Qt 设计模式之单例模式
概述一个类只有一个对象,有利于我们协调系统整体的行为。头文件#include <QMutex>介绍由于一个类只能拥有一个实例化的对象,因此不能用 new 来新建对象,那么要把构造函数声明为私有的。GetInstance 是用来获取单例对象的一个方法在类中添加一个私有静态成员变量用于保存单例实例, 如果单例的初始值为 NULL,那么我们就构建单例对象然后返回,这个方法称为懒汉模式。QMutex 的目的是同一时间只有一个线程可以访问。代码头文件/// @class 单例类c原创 2021-02-25 09:52:11 · 1381 阅读 · 0 评论 -
Qt 动态加载图片
#include "mainwindow.h"#include "ui_mainwindow.h"#include <QDir>#include <QString>#include <QStringList>#include <QListWidget>#include <QVBoxLayout>#include <QListWidgetItem>#include <mainwindo原创 2017-10-13 20:30:36 · 1690 阅读 · 0 评论 -
Qt QTableView 输入数据不正确 返回之前的旧数据
概述表格输入数据不正确,应该返回之前的值,而双击的点击事件却会是新的值。比如旧的值是 5,规则是表格中的值只能是 20 以下的,用户输入 25,判断不正确,然后弹框,界面会显示 25,正确结果应该是 5。为了解决这个问题,那我们就要先保存之前的 5,然后设置到这个单元格上。代码双击单元格事件保存旧的值// 关联双击事件和槽函数connect(tableView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(ClickCe原创 2021-01-27 17:14:29 · 851 阅读 · 2 评论 -
C++ 返回数组指针的函数
概述数组指针:指的是数组名的指针,即数组首元素地址的指针。函数返回数组指针,然后我们可以获取整个数组的值。代码 int a[40]; // DoSomething // a 数组的值已经变了,这时候我们要返回 a数组的值给别的类使用 int (*GetData())[40] { return &a; } int recvData[40] = {0}; int (*p)[40] = GetData(); for(int i原创 2021-01-06 15:12:59 · 840 阅读 · 0 评论 -
Qt 常用快捷键
常用快捷键操作快捷键跳转到上一个光标Alt + ←光标前进到下一位置Alt + →跳到某一行Ctrl + L原创 2021-01-06 10:54:56 · 920 阅读 · 0 评论 -
Qt QTableView 使用委托
概述一个需求是表格中只能填 1 到 18 的数字,因此通过委托来实现。函数createEditor返回在 QTableView 中使用的控件,就在这边用正则限制输入的数据。setEditorData从指定的数据模型设置要由编辑器显示和编辑的数据setModelData从 editor 小部件获取数据,并将数据存储在项目索引处的数据模型中。updateEditorGeometry根据给定的样式选项,更新 index 指定项的编辑器。代码实现class TableDelegate: p原创 2020-12-31 10:30:00 · 1909 阅读 · 0 评论 -
Qt 常用数据类型转换
char* 转 QStringchar* ch = "yunhu";QString str(ch);char* ch = "yunhu";QString str = QString::fromUtf8(ch);原创 2020-12-23 10:58:59 · 1742 阅读 · 0 评论 -
Qt 通过信号和槽实现对话框之间的数据传递
概述通过 QT 信号和槽机制实现父对话框和子对话框的数据传递。步骤子对话框声明信号signals: /// @brief 用来传递数据的信号,将当前对话框数据传给 MainWindow /// @param [in] vector 数据 void SendData(QVector<int>);发射信号void on_pushButton_clicked(){ QVector<int> a; a.push_back(1);原创 2020-12-22 14:21:21 · 696 阅读 · 0 评论 -
Qt 点击按钮弹出新对话框
概述点击按钮,弹出对话框。方法添加 Qt 设计师界面类在 MainWindow.h 加入刚才生成的头文件,然后在成员上添加刚才那个界面的类的指针Dialog *dialog;在按钮的点击事件中加入以下代码 dialog = new Dialog(this); dialog->setModal(false); dialog->show();...原创 2020-12-21 16:53:20 · 5347 阅读 · 0 评论 -
Qt Creator 调试时查看数组值
概述在 Qt Creator 调试情况下查看二维数组的值。方法原数组: int a[10][20]添加表达式求值器*a[1]@20查看 a[1] 的 20 个值。原创 2020-12-03 14:17:34 · 2336 阅读 · 0 评论 -
Qt 打包步骤及出现无法定位程序输入点解决方案
概述通过 QT 打包 exe步骤设置环境变量找到 windeployqt.exe 所在的 bin 目录,将其添加到环境变量中。编译生成 release 版本的 exe在 QT Creator 中操作打包 exe新建一个文件夹,将 release 生成的 exe 单独复制出来,然后把 exe 放进刚刚新建的文件夹中。重点来了,如果你用 cmd 命令行执行以下操作:windeployqt 项目名称.exe那么不好意思,会出现无法定位程序输入点,这时候我找了很多教程,什么移动环境变量中的原创 2020-11-18 16:44:56 · 2802 阅读 · 5 评论 -
Qt 使用 canon edsdk 实现实时预览
概述想要使用 canon 的 sdk 进行实时的一个预览,即 LiveView 功能。前期准备前期的一些相机的连接,可以参考我之前写的文章 QT 使用 canon sdk 拍照并保存到本机实时预览步骤StartLiveView声明一个变量来标志 m_isLiveView 来标识 liveview 是否开启。将实时预览输出到 PC 上device |= kEdsEvfOutputDevice_PC;// -----------------------------void MainWin原创 2020-11-06 18:32:50 · 1380 阅读 · 14 评论 -
Qt 显示视频大小和位置
QString path = QFileDialog::getOpenFileName(this, tr("选择视频"), ".", tr("Image Files(*.flv *.mp4)"));//得到视频路径 mediaPlayer = new QMediaPlayer(); layout_video = new QVBoxLayout; videoWidget = n原创 2017-09-28 19:14:46 · 1883 阅读 · 0 评论 -
Qt 读写 txt 文件
概述利用 Qt 进行文件读写操作代码void WriteTxt(){ QString fileName = "yunhu.txt"; QFile file(fileName); if(!file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append)) { QMessageBox::warning(NULL, "警告!", "错误!", QMessageBox::Yes | QMessageB原创 2020-10-29 14:49:50 · 4872 阅读 · 1 评论 -
STL vector 基本用法
头文件为#include<vector> 创建对象 vector<int> a; 尖括号中为这个向量中的元素的数据类型 尾部插入数据a.push_back(x); x 为插入的数据 因为在vector中已经重载了下标运算符 使用迭代器访问元素 //使用下标访问元素 cout<<a[0]<<endl; #include<iostream>#include<vector>#include<原创 2016-06-17 21:42:43 · 353 阅读 · 0 评论 -
socket 通信之客户端
客户端向服务器端发送连接请求,连接成功接收服务器发送的数据。新建工程,Base class选择QWidget,在工程文件tcpServer.pro中添加一行代码QT += core guiQT += network我们在widget.ui中添加3个标签Label和两个Line Edit以及一个按钮Push Button。其中“主机”后的Line Edit的objectName为hostLi原创 2017-07-03 16:40:02 · 463 阅读 · 0 评论 -
socket通信之传送数据
QTcpServer的基本操作: 1、调用listen监听端口。 2、连接信号newConnection,在槽函数里调用nextPendingConnection获取连接进来的socket。QTcpSocket的基本能操作: 1、调用connectToHost连接服务器。 2、调用waitForConnected判断是否连接成功。 3、连接信号readyRead槽函数,异步读取数据。 4原创 2017-07-04 17:29:31 · 440 阅读 · 0 评论 -
Qt 登录界面及窗口跳转
新建一个login.ui表示登录界面的ui。设置一个manage类,管理界面的显示,刚开始,登录界面显示,聊天界面关闭。列表内容Manage::Manage()//登录界面显示,聊天界面关闭{ log = new Login( NULL,this); chat = new MainWindow(NULL,this); log->show(); chat->hid原创 2017-07-05 23:34:58 · 11358 阅读 · 0 评论 -
Qt 通过 QtConcurrent 解决主界面被阻塞的问题
概述在主界面点击按钮,处理一下耗时的计算函数,由于计算函数耗时较久,所以会出现主界面被阻塞,提示未响应,然后等计算函数完成后,主界面就会恢复正常。但是用户可能在提示未响应的时候就把程序关掉了,用户体验会很差,所以要解决这个问题。引入在 .pro 文件中加入 QT += concurrent在 mainwindow.h 中加入#include <QtConcurrent>#include <QFuture>代码void MainWindow::on_push原创 2020-10-22 17:52:59 · 3379 阅读 · 2 评论 -
Qt 通过资源管理器选择文件夹并获取底下某一类型的所有文件
概述通过 Qt 打开资源管理器选择文件夹,并获取底下所有自定义后缀名的文件。后缀名可以是多个的组合。代码void GetFileList(){ QString strUserChooseDir = QFileDialog::getExistingDirectory(this, tr("选择文件夹"), "", QFileDialog::DontUseNativeDialog); QDir dir(strUserChooseDir); // 获取当前文件夹底下的所有 cr2原创 2020-10-20 16:45:17 · 913 阅读 · 0 评论 -
c++ 通过 libraw 获取 raw 格式的 rgb 值
概述获取 canon CR2 格式的 rgb 值,因为 opencv 的 imread 并不支持 CR2 格式的,所以先用 libraw 处理,然后转成 Mat 矩阵处理,最后再通过 opencv 获取 rgb 的值。步骤1. 初始化 libraw libraw_data_t *iprc = libraw_init(0);2. 打开 CR2 文件 QString imgSavePath("C://Users//Administrator//Desktop//test//IMG_07原创 2020-10-19 18:03:10 · 1391 阅读 · 9 评论 -
vs 生成 opencv32 lib 和 dll
概述opencv 官网下只有 64 位的 lib 和 dll,由于项目需要用到 32 位,所以需要自己编译。工具CMake 通过它来生成。操作步骤打开 CMake配置好 vs 版本和生成 lib 路径勾选 opencv world 使其产生 dll点击 configure 让其变白,千万不要直接点击 Generate,一定要注意最后点击 Generate 按钮生成 VS 工程在生成的路径中找到 opencv.sln 然后用 vs 打开,在 vs 中选择 de原创 2020-10-15 11:29:39 · 475 阅读 · 0 评论 -
Qt 使用 canon sdk 拍照并保存到本机
概述通过 usb 连接 canon 单反,通过 QT 拍照,并将拍到的图像保存到本机。操作步骤1. 初始化 SDK EdsInitializeSDK();2. 获取相机列表对象 EdsCameraListRef cameraList = NULL; error = EdsGetCameraList(&cameraList);3. 获取相机列表对象数量 // 遍历相机列表对象,获取相机列表对象数量 EdsUInt32 cameraCount = 0;原创 2020-10-12 17:17:00 · 2089 阅读 · 27 评论 -
Win 32 绘制矩形和正弦波
1. 绘制矩形1.1 直线方式绘制矩形代码 int i; HDC hdc; hdc = GetWindowDC(hWnd); POINT apt[5] = { 200, 200, 400, 200, 400, 400, 200, 400, 200, 200 }; MoveToEx(hdc, apt[0].x, apt[0].y, NULL); for (i = 1; i <...原创 2019-11-06 12:10:35 · 449 阅读 · 0 评论 -
深入浅出 windows 消息机制
Win 32 应用程序生命周期1. 程序进入点Windows 程序进入点是 WinMain 函数函数原型int __clrcall WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd);函数参数hinstance 应用程序当...原创 2019-11-05 17:19:28 · 280 阅读 · 0 评论 -
c++ 求矩阵行列式
概述求矩阵行列式代码#include<iostream>#include<stdlib.h>using namespace std;//变量int MenuSelect;int matrix[10][20];//矩阵int clone[10][20];int n;int DetValue;//函数void MainMenu();//主界面voi...原创 2019-11-02 17:55:34 · 4293 阅读 · 2 评论 -
c++ 删除浮点数结尾的无效0
引入 #include 代码 double DeleteEndInvalidZero(double origin) { double dRes; string strRes; ostringstream oss; oss << origin; strRes = oss.str(); dRes = stod(strRes); return dRes;...原创 2019-09-04 11:30:10 · 1651 阅读 · 0 评论 -
VS 引用头文件 lib 和 dll
1. 引用头文件右键项目 -> 属性 -> 配置属性 -> C/C++ -> 常规 中的附件包含目录,输入你所要引用的头文件所在的目录。之后就可以在某个 cpp 文件中 include<xxx.h>,这样就完成引入头文件。2. 引用 lib添加 lib 有两种方法,如下:配置 lib 文件目录右键项目 -> 属性 -> 配置属性 -&...原创 2019-09-05 17:29:47 · 1833 阅读 · 0 评论 -
深入浅出 c++ 指针
初识指针int higgens = 5;int *pt = &higgens;直接将指针初始化为变量的地址,然而变量是在编译时分配的内存,这种情况下,指针只是一个通过名称直接访问内存的别名,无法发挥出真正的力量。指针的真正作用指针的真正作用在于运行阶段时分配未命名的内存以及存储值。int* pn = new int;一个细节是指向 int 的指针的长度与指向 double...原创 2019-09-12 11:54:00 · 189 阅读 · 0 评论 -
c++ UTF8 的 string 转为 Unicode 的 wstring
概述在用 rapidjson 解析本地 json 文件的时候,发现中文字符显示乱码,json 文件是用 UTF8 编码的,VS 项目所使用的是 Unicode 字符集,因此需要将在 json 中获取到的 string 转为 wstring。相关函数int MultiByteToWideChar( UINT CodePage, DWORD dwFlags, LPCSTR lpMul...原创 2019-09-30 09:45:56 · 1020 阅读 · 0 评论 -
c++ rapidjson 解析本地 json 文件
概述使用 rapidjson 来解析本地的 json 文件。本地 json 文件{ "num": 3, "subject": [ "Math", "English", "Computer Science" ], "info": [ { "value": "线性代数", ...原创 2019-09-30 11:05:13 · 2052 阅读 · 0 评论 -
c++ 使用 rapidjson 生成 json 并解析
概述使用 rapidjson 生成 json 并对其进行解析。常用函数AddMember功能:往对象中添加一个键值对。函数原型GenericValue& rapidjson::GenericValue< Encoding, Allocator >::AddMember( GenericValue< Encoding, Allocator >...原创 2019-10-08 10:14:32 · 1199 阅读 · 0 评论 -
c++实现集合的交并差集
#include <iostream.h>#include <string.h>class set{public: set(int *q = NULL, int length1 = 0); friend set operator+(set &e, set &f); friend set operator*(set &...原创 2016-05-28 13:48:00 · 8254 阅读 · 1 评论 -
c++ const 用法
1. const定义常量必须立刻进行初始化const int p = 10;常量 p 有数据类型,因此可以进行更加严格的类型检查,占用存储单元,有地址,可以用指针指向它,但不能修改它。它消除了 #define 的不安全性。2. const修饰指针变量指向常量的指针const char * name = “chen”;声明一个名为 name 的指针变量,它指向一个字符型常...原创 2019-03-19 11:14:46 · 249 阅读 · 1 评论