- 博客(110)
- 资源 (26)
- 问答 (1)
- 收藏
- 关注
原创 C#委托实例
1 委托简单使用using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DelegateDemo{ class Program { static void Main(string[] args) { Calculator calu =..
2022-05-11 21:43:01 1199
原创 多线程,在构造期间不能泄露this指针
对象构造要做到线程安全,唯一的要求是在构造期间不要泄露this指针,即:不要在构造函数中注册任何回调;也不要在构造函数中把this传给跨线程的对象;即便在构造函数的最后一行也不行。之所以这样规定,是因为在构造函数执行期间对象还没有完成初始化,如果this被泄露给了其他对象(其自身创建的子对象除外),那么别的线程有可能访问这个半成品对象,这会造成难以预料的后果。参考文献:《Linux多线程服务端编程:使用muduo C++网络库 》...
2021-06-14 11:05:55 331
原创 Github开源项目搜索
1.搜索名字 in:name xxx2.搜索描述 in:description xxx3.搜索readme in:readme xx4.按stars stars:>10005.按fork fork:30006.仓库大小搜索 size:>=5000 [5000是大小,单位k]7.按更新时间 pushed:>2020-06-128.按语言 language:xxx9.按作者名 user:xxx [xxx后面不能有空格]10.搜索方式可以自
2021-06-12 16:31:54 184
原创 拷贝赋值运算符和拷贝构造函数的区别
拷贝构造函数和赋值运算符的行为比较相似,都是将一个对象的值复制给另一个对象,但是其结果却有些不同,拷贝构造函数使用传入对象的值生成一个新的对象的实例,而赋值运算符是将对象的值复制给一个已经存在的实例。这种区别从两者的名字也能轻易的分辨出来,拷贝构造函数也是一种构造函数,那么它的功能就是创建一个新的对象实例;赋值运算符是执行某种运算,将一个对象的值复制给另一个对象(已经存在的)。调用的是拷贝构造函数还是赋值运算符,主要是看是否有新的对象实例产生,如果产生了新的对象实例,那调用的就是拷贝构造函数;如果没有,那
2021-02-19 12:50:06 1350
原创 Qt信号槽的几种写法
信号槽是Qt的核心部分,它使得对象之间的的通信变得很简单。Qt通过connect来连接信号与槽,当信号被发出时,槽函数立刻被执行,connect函数有五个重载:// 重载1QMetaObject::Connection connect(const QObject *, const char *, const QObject *, const char , Qt::ConnectionType); // 重载2QMetaObject::Connection connect(const QObject
2021-02-13 13:59:23 899
原创 win32API如何获取进程句柄
要获取某个进程的句柄,首先要获取该进程的ID,通过ID获取进程的句柄。代码如下:需要用到的头文件:#include "tlhelp32.h"#include "windows.h"DWORD GetProcessidByName(const wchar_t* name){ PROCESSENTRY32 pe ={0}; DWORD id = 0; HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); pe.
2020-07-26 11:17:15 1062
原创 C++ 静态成员函数如何访问非静态成员
我们知道,普通成员函数隐藏这一个this指针,所以可以去调用类中别的成员函数和成员变量。静态成员函数不能访问非静态成员,这是因为静态函数属于类而不是属于某个对象,静态函数的创建要早于非静态函数和成员变量,静态函数中的member可能都没有分配内存。此外,静态成员函数没有隐含的this自变量。所以,它就无法访问自己类的非静态成员。那么如何调用呢?我们可以显示的传入对象指针,如下:class Demon1{public: static void FunctionA(Demon* p) {
2020-07-14 11:09:35 1429
原创 std::shared_ptr及std::unique_ptr使用数组注意事项
默认情况下,std::shared_ptr会调用delete来清空内存。当使用new[] 分配内存时,需要调用delete[] 来释放内存,否则会有内存泄露。可以通过以下代码来自定义释放内存的函数: template< typename T > struct array_deleter { void operator ()(T const * p) { delete[] p; }};通过以下代码来声明std::shared_ptr指针:
2020-06-18 20:00:25 7323 1
原创 如何实现DLL延迟加载
1.不建议采用将DLL拷贝到工程目录下的方式开发2.设置流程:a) 卸载延迟加载的DLL(Yes);b) 延迟加载的DLL:填入要加载的DLL全名以‘;‘间隔;c) 调试->环境: 填入DL路径(推荐相对路径)以‘;‘间隔,如:path=../../../DllPath1/bin;../../../DllPath2/x64/bin;$(PATH)Demo:#include "stdafx.h"#include "windows.h"int main(){ HMODULE hL
2020-06-01 15:32:05 645
转载 Qt 优化QTreeWidget的三态:勾选,未勾选,半勾选
这是以前做过的例子,之前是参考的网上的例子,觉得遍历次数太多,效率不行。自己尝试优化修改了一番。小试牛刀,欢迎拍砖。效果如下图:示例数据做得比较粗糙。来看看是怎么实现的吧。功能勾选树控件的节点,其子节点全部选中或全部取消选中父节点选中或者部分选中实现QTreeWidgetItem的复选框,可以通过setCheckState(int column,Qt::CheckState stat...
2020-03-07 10:16:35 2170
原创 QT 如何设置TreeView控件有连接线
一句代码搞定:ui.treeWidget->setStyle(QStyleFactory::create("windows"));
2020-03-07 09:57:00 2104
原创 QT如何截图
void CMainWin::ScreenShot(){ QDir dir; //进入某文件夹 dir.cd("./"); //判断需要创建的文件夹是否存在 if (!dir.exists("ScreenShot")) { qDebug() << "Create Dir"; //创建文件夹 dir.mkdir("ScreenShot"); } QSt...
2020-03-05 18:59:02 192
原创 QT如何获取文件夹名及路径,文件名及文件路径
1、获取文件夹名//获取目录下的文件夹名列表QStringList GetDirNameList(const QString &strDirpath){ QDir dir(strDirpath); QFileInfoList Info_list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot); QListIterat...
2020-03-01 10:53:56 8701
原创 QT QTableView设置列宽自适应和水平滚动
两行代码搞定 //设置tableView水平滚动和自适应宽度 ui.tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); ui.tableView->horizontalHeader()->setStretchLastSection(false);...
2020-02-26 11:47:08 3267 3
原创 QT关于QTreeWidget 如何获取当前Item文本
直接上代码QTreeWidgetItem *pCurrentItem = ui.treeWidget->currentItem();QString strText = pCurrentItem->text(0);text(0) 中的 0 表示 columns 第一栏(通俗点就是第一列吧)...
2020-02-26 11:43:01 10831
原创 最基本最常用的排序算法汇总
1.基本的排序算法冒泡排序( Bubble Sort)插入排序(Insertion Sort)2.常考的排序算法归并排序( Merge Sort )快速排序(Quick Sort )拓扑排序(Topological Sort)3.其他排序算法堆排序(Heap Sort)桶排序(Bucket Sort)注意:1,冒泡排序和插入排序是最基础的,面试官有时候喜欢拿它们来考察你的基础...
2020-02-25 21:36:19 367
原创 QT 正则表达式格式汇总
只能输入数字:"^[0-9]*$"。只能输入n位的数字:"^\d{n}$"。只能输入至少n位的数字:"^\d{n,}$"。只能输入m~n位的数字:"^\d{m,n}$"。只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?...
2020-02-23 22:38:39 653
原创 QT sqlite数据库 日期为变量时,如何按时间筛选数据库中的数据
//起始时间 QString strBegTime = ui.BegdateTimeEdit->text(); //结束时间 QString strEndTime = ui.EnddateTimeEdit->text(); //搜索命令 QString strQuery = "select * from Log where DateTime >= \'" + strB...
2020-02-18 16:27:50 2154 1
转载 QT char*,char[],QString,string互相转换
char*,char[],QString,string互相转换比较杂,本文参考现有博文做了总结。1.char* 转QString方法一:直接用QString的构造函数转换,如下:char* ch = "acuity";QString str(ch);方法二:用QString的静态转换函数获取,如fromUtf8()、fromLocal8bit()、fromUtf16(),如下:cha...
2020-01-12 22:36:12 11090
原创 VS2013附加包含目录,添加相对路径
VS2013创建一个工程之后如下:相对路径里面的“相对”实际上指的是以工程文件XXX.vcproj为起点进行计算的路径。该工程中包含的源文件要包含一个头文件,该头文件所在路径如下:D:\Code\codeCplusplus\Hello\Hello\include则我们可以从工程文件Hello.vcproj所在目录为起点,相对路径应为:…\Hello\include。如果该工程中包含的...
2020-01-03 15:13:59 4822
原创 QT 利用QStackWidget 和提升为类的方式 实现界面切换
环境:QT5 + VS2013首先新建一个带ui的主界面类,在添加两个带ui界面的类FirstPage和SecondPage,这里都是用了QWiget。然后在主界面中拖拽一个stackWidget,默认有两个界面,这里改名为page1和page2,并将他们俩提升为刚刚添加的那两个类(提升类的方法这里就不赘述了)。效果图如下:其它就不多说了,直接上代码:主窗口://.h#ifndef M...
2019-12-25 21:53:48 1900
原创 QT QTableWidget设置单元格不可编辑
简单记录一下解决这个问题的方法:方法1: QTableWidgetItem* pItem = ui.tablewidget->item(iRowIndex, iColIndex); //获取该单元格的pItem pItem->setFlags(Qt::ItemIsEditable);这种方法可以使单元格内容变为灰色,且不能选中单元格;用户不能编辑单元格内容,但是可以这样修改:...
2019-12-23 16:19:35 8976
原创 QT QTableWidget向单元格格中填充控件,如何单击获取该控件所在的行和列
最近在使用QTableWidget,想要获取某个单元所在的行和列,一般可以使用QTableWidget的信号void cellEntered(int row, int column)。写自己的槽函数void MySlotFun(int row, int column)获取行和列即可。注意:该种方法只要将鼠标放在单元格上就可以获得该单元格的行和列。void cellEntered(int row...
2019-12-23 16:06:02 2005 7
原创 QT 如何在弹出自定义对话框时主界面不可操作
最近在做主界面通过按钮弹出对话框时,想让弹出对话框时主界面不可操作。总结两种方法如下;方法一:继承QDialog,class CMyDialog : public QDialog{ Q_OBJECTpublic: CMyDialog(QWidget *parent = 0); ~CMyDialog(); QStringList GetValue();private: Ui...
2019-12-20 12:42:34 2878
原创 VS2013+QT 编译时 “QDomDocument” 文件找不到的问题
这里将提供两种解决办法方法一:【右键工程】,选择【Qt Projct Setting】,勾选XML即可。方法二:步骤一:项目->属性->c/c+±>常规->附加包含目录->在弹出的对话框中,点那个文件夹形状的按钮添加新行,输入$(QTDIR)\include\QtXml步骤二:项目->属性->连接器->输入->附加依赖项,添加 Q...
2019-12-12 18:35:17 3524
原创 cin使用技巧
使用cin过程中,如果只想读数字,遇到字母无法退出循环的问题:while (1){ std::cin >> n; if (std::cin.fail()) { //如果输入失败,清空处理,方可继续 std::cin.clear(); std::cin.sync(); printf("重新输入:...
2019-12-08 22:00:24 521
原创 C/C++ this指针 和 利用const隐式的修改this指针类型
1.this 指针this指针指向用来调用成员函数的对象(this被作为隐藏的参数传递给方法)。每一个成员函数(包括构造函数和析构函数)都有一个this指针,this指针指向调用对象。如果方法需要引用整个调用对象,则可以使用表达式*this,在函数的括号后面使用const*限定符将this限定为const,这样将不能使用this来修改对象的值。然而,要返回的并不是this,因为this是对象的地...
2019-12-05 10:22:24 826
原创 C/C++程序运行耗时统计(高精度)
方法一:(单位为微秒) #include<iostream> #include <chrono> #include <windows.h> using namespace std; using namespace chrono; int main() { auto start = sy...
2019-12-03 21:56:12 2020
原创 C/C++ 文件读写操作
1.文件写操作可参考 文件写操作2.文件读操作采用标准库里面的read();函数原型:istream& read (char* s, streamsize n);s为文件名,n为要读取的字节长度。几个常用的成员函数:(1). stream& seekg (streamoff off, ios_base::seekdir way)(2) 第二个参数有以下...
2019-12-02 22:09:23 435
原创 C/C++什么时候需要定义一个复制构造函数
1.关于复制构造函数复制构造函数用于将一个对象复制到新创建的对象中。也就是说,它用于初始化过程中(包括按值传递参数),而不是常规的赋值过程中,类的复制构造函数原型如下:ClassName(const ClassName &)注意:这里之所以使用引用,可以有效的防止无限递归的去调用复制构造函数,可以节省调用构造函数的时间以及存储新对象的空间。2.何时调用复制构造函数新建一个对对象...
2019-12-02 21:40:30 576
原创 new 内存失败如何处理
方法一: try { //分配内存 int* a= new int[bigBigNum]; } catch(std::bad_alloc) { //异常处理 // 返回 }方法二: try { double *ptr=new double[100000...
2019-11-01 22:30:56 164
原创 C++写日志Log
GitHub上面下载的代码,挺好用,权当学习#ifndef YLOG_YLOG_H_#define YLOG_YLOG_H_#include <string>#include <fstream>#include <cassert>#include <ctime>class YLog{private: std::ofstream ...
2019-11-01 22:21:46 328
转载 C/C++ 打印文件名、行号、函数名的方法
1、打印文件名、行号、函数的两种方式 #include <cstdio> //定义打印宏,并在打印信息前加入文件名、行号、函数名 //此宏展开后,类似于printf("123"),printf("456"); #define TRACE_CMH_1 (printf("%s(%d)-<%s>: ",__FILE__, __LINE__, __F...
2019-11-01 22:17:16 1937
原创 QT 事件滤波器实现全屏显示、右键菜单
bool MyMain::eventFilter(QObject *watched, QEvent *event){ if (watched == ui.ShowLabel)//当事件发生在(为Qlabel型)控件上 { if (event->type() == QEvent::KeyPress) { //ESC退出全屏 QKeyEvent* keyEvent...
2019-11-01 22:09:34 543
转载 Qt中实现屏幕或窗口(控件)截图功能
要想在Qt中实现屏幕或窗口截图功能 ,通常有两种方法: 1-- 使用 QPixmap 类 2-- 使用 QScreen类然而虽然俩两种方法用到的类不相同,但是调用到的类成员函数的函数名称和参数却是相同的都是 grabWindow() 这个函数所不同的是QPixmap中的 grabWindow()函数 是静态成员QScreen中的grabWindow()成员是非静...
2019-10-21 14:18:11 6260 2
转载 C++11 std::move和std::forward
0 绪论关于左值右值示例可看这里1、左值和右值的概念左值是可以放在赋值号左边可以被赋值的值;左值必须要在内存中有实体;右值当在赋值号右边取出值赋给其他变量的值;右值可以在内存也可以在CPU寄存器。一个对象被用作右值时,使用的是它的内容(值),被当作左值时,使用的是它的地址。2、引用引用是C++语法做的优...
2019-06-06 10:39:47 683 1
原创 C++并发与多线程编程之std::async、std::future、std::package_task、std::promise
1 std::async, std::future创建后台任务并返回值 std::sync是个函数模板,用来启动一个异步任务,启动起来一个异步任务之后,他返回一个std: :future对象, std: :future是一个类模板。什么叫“启动一个异步任务”,就是自动创建一个线程并开始执行对应的线程入口函数,它返回一个std::future对象, 这个std:: future对象...
2019-06-05 14:53:28 567
Makefile.pdf
2020-11-15
利用代理的方式向QtableWidegt 中添加各种控件
2020-05-30
利用QStackWidget 和提升为类的方式 实现界面切换 小Demo
2019-12-25
智能优化算法.rar
2019-12-15
100题系列by_July.pdf
2019-12-15
十五个经典算法研究与总结、目录+索引(by_....pdf
2019-12-15
超详细的程序员笔试面试书籍(视频+电子书)
2018-10-30
二轮平衡车全套源码(超全)
2018-07-05
mavlink-generator.zip
2018-04-14
ANSYS 曲轴 有限元分析 SOLIDWORKS
2018-03-21
QT中的QTableWidget 如何 鼠标悬停在单元格上显示行号?
2019-12-20
TA创建的收藏夹 TA关注的收藏夹
TA关注的人