• C++/Qt 小知识记录


    工作中遇到的一些小问题,总结的小知识记录:C++/Qt,夹杂点GIS


    QFile拷贝文件到另一处,打开目的文件却因ReadOnly无法操作

    解决方案一:
    读取源文件Cache内容,新建一个可读可写的目的文件,拷贝Cache到其中;

    解决方案二:
    目的文件改变其权限:

    QFile::setPermissions(Public_canshufile,QFileDevice::ReadOther|QFileDevice::WriteOther);
    
    • 1

    去除浮点数科学计数法的显示

    // Qt处理
    		QString strLongitude = QString::number(dLongitude, 'f', 15);
    		strLongitude.remove(QRegExp("0+$"));
    		strLongitude.remove(QRegExp("\\.$"));
    
    • 1
    • 2
    • 3
    • 4
    // std处理
    		std::stringstream ss;
    		ss << std::setfill('0') << std::setprecision(14) << std::fixed << m_dDegree;
    		std::string str = ss.str();
    
    • 1
    • 2
    • 3
    • 4

    Shp格式的限制

    属性名最多为10字符;
    dbf属性表最多255个字段;
    shp文件和dbf文件最大2GB;
    每个shp只能是一种几何类型;

    数据库整型的设置

    Type Bytes Minimum Value Maximum Value
    (Signed/Unsigned) (Signed/Unsigned)
    TINYINT 1 -128 127
    0 255
    SMALLINT 2 -32768 32767
    0 65535
    MEDIUMINT 3 -8388608 8388607
    0 16777215
    INT 4 -2147483648 2147483647
    0 4294967295
    BIGINT 8 -9223372036854775808 9223372036854775807
    0 18446744073709551615

    时间戳与日期的转换(Windows)

    // 精确到100纳秒级别的时间戳
    FILETIME fileTime;
    long long now_long;
    GetSystemTimeAsFileTime(&fileTime);
    now_long = (long long(fileTime.dwHighDateTime) << 32) + fileTime.dwLowDateTime;
    std::cout << "micro time from 1601.1.1:00:00:00 is: " << (now_long / 10) << std::endl;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    // 获取当前时间
    char date0[64] = {0};
    time_t setTime;
    time(&setTime);
    tm* ptm = localtime(&setTime);
    strftime(date0, 64, "%Y-%m-%d %H:%M:%S",ptm); 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    std::string TimeStampToDate( time_t nTimestamp )
    {
    	if (nTimestamp < 0)
    	{
    		return "";
    	}
    
    	char date0[64] = {0};
    	time_t tt = nTimestamp;
    	struct tm *ttime; 
    	ttime = localtime(&tt);
    	strftime(date0, 64, "%Y-%m-%d %H:%M:%S",ttime); 
    
    	return date0;
    }
    
    time_t DateToTimeStamp( const std::string& strDate )
    {
    	if (strDate.empty())
    	{
    		return -1;
    	}
    
    	struct tm tt;
    	sscanf(strDate.c_str(), "%d-%d-%d %d:%d:%d", 
    		&tt.tm_year, 
    		&tt.tm_mon, 
    		&tt.tm_mday, 
    		&tt.tm_hour, 
    		&tt.tm_min, 
    		&tt.tm_sec);
    	tt.tm_year -= 1900;
    	tt.tm_mon -= 1;
    
    // 	std::cout << "tt.tm_year:" << tt.tm_year << std::endl;
    // 	std::cout << "tt.tm_mon:" << tt.tm_mon << std::endl;
    // 	std::cout << "tt.tm_mday:" << tt.tm_mday << std::endl;
    // 	std::cout << "tt.tm_hour:" << tt.tm_hour << std::endl;
    // 	std::cout << "tt.tm_min:" << tt.tm_min << std::endl;
    // 	std::cout << "tt.tm_sec:" << tt.tm_sec << std::endl;
    // 	std::cout << "tt.tm_isdst:" << tt.tm_isdst << std::endl;
    // 	std::cout << "tt.tm_wday:" << tt.tm_wday << std::endl;
    
    	return mktime(&tt);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    QDialog去除问号

    setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
    
    • 1

    Std保留小数点后6位

    #include 
    #include 
    std::stringstream ss;
    ss << "经度:" << std::setfill('0') << std::fixed << std::setprecision(6) << vPt.x << "°";
    
    • 1
    • 2
    • 3
    • 4

    获取磁盘空间

    QString strDiver;
    LPCSTR lpcwstrDriver = "D:/";
    ULARGE_INTEGER liFreeBytesAvailable, liTotalBytes, liTotalF reeBytes;
    if (GetDiskFreeSpaceEx(lpcwstrDriver, &liFreeBytesAvailable, &liTotalBytes, &liTotalFreeBytes))
    {
    	//磁盘总空间
    	qDebug() << "liTotalBytes=" << liTotalBytes.QuadPart / 1024 / 1024 / 1024 << "G";
    	//磁盘剩余空间
    	qDebug() << "liTotalFreeBytes=" << liTotalFreeBytes.QuadPart / 1024 / 1024 / 1024 << "G";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    【C++面向对象程序设计】类与对象的引入、this指针
    网络安全深入学习第一课——热门框架漏洞(RCE-命令执行)
    cento7 安装anaconda3 2023.03-1版本保姆版
    闲置的华为悦盒搭建海思NAS&Ubuntu系统(二)
    Launcher3介绍
    Java 开发从零开始,java 基础入门传智播客网页版,Java 后端路线图
    git的约定式提交
    Python学习 -- 常用数据交换格式(CSV、XML、JSON)
    安利几个好用的图片转文字识别软件
    计算机毕业设计选题推荐-二手交易跳蚤市场微信小程序/安卓APP-项目实战
  • 原文地址:https://blog.csdn.net/Being__/article/details/126721602