个人QT开发经验

QT中文乱码

详见:https://blog.csdn.net/qing666888/article/details/79518499
开启预编译头功能,在预编译头加入如下代码

//源代码编码必须是: UTF-8(BOM)    
#if _MSC_VER >= 1600  
#pragma execution_character_set("utf-8")  
#endif  

QT布局

在水平或垂直布局中,如何设置各个控件所占的比例?
选中该LayOut对象,在LayOut属性中,设置layoutStretch。会发现在该layout中有几个控件,这个属性中就有几个数字,默认为0.0.0。改变这些数字比例就可以设置各个控件的填充比例了。

项目路径中一定不要出现中文

无论是创建的还是添加的项目路径中都不要出现中文路径,否则编译时无法通过的

信号-槽对应关系

QT提供了一种默认信号-槽对应关系:on_控件名称_信号函数名称(参数列表).当定义了这样的函数后,QT会将函数自动与界面控件的信号相关联,当控件触发了相关事件后这个函数将会被触发.
另外一种方式是直接使用QObject::connect函数来关联信号和槽.语法为:
connect(发出信号的对象指针,SIGNAL(信号函数原型), 响应信号的对象, SLOT(槽函数原型));

QT5修改自动补全快捷键

QT禁用最大化按钮 和 禁止调节窗口大小

setWindowFlags(windowFlags()& ~Qt::WindowMaximizeButtonHint);  
setFixedSize(this->width(), this->height());  

修改生成文件的目录为工程的当前目录下。默认生成在工程目录相同的目录不便于管理。

生成debug和release文件

../build-%{CurrentProject:Name}-%{CurrentKit:FileSystemName}-%{CurrentBuild:Name}

修改为

./%{CurrentBuild:Name}

QT调试信息输出至控制台显示打印

1、第一步:项目–运行 界面下勾选Run in terminal

2、第二步:在项目的pro文件中添加,修改完pro文件之后,点击你当前的工程文件,鼠标右键—》执行qmake ,让其生效:

CONFIG +=console

3、有时候会出现,控制台没有显示调试信息,这是因为printf标准输出和标准错误输出均有缓存,缓存达到一定程度后方才输出,可设置即时输出 如下

setvbuf(stdout, 0, _IONBF, 0);

QString 转 char*  然后拷贝到char[]数组

QString osdStr = "明卿出品!";
std::string strName = osdStr.toStdString();
const char *buffer = strName.c_str();

char osdInfo[256];
memset(osdInfo, 0, sizeof(osdInfo));
memcpy(osdInfo, buffer, strlen(buffer));

QString 编码格式转换:GB2312--->GBK--->GB18030(后面包含前面)

ANSI 编码表示英文字符时用一个字节,表示中文用两个或四个字节 —— 这带来了存储空间的减少,但却带来的格式的
不统一和混乱。上述三种编码都属于ANSI编码。
ANSI是一种字符代码,为使计算机支持更多语言,通常使用 0x00~0x79 范围的 1 个字节来表示 1 个英文字符。超出此范围的使用 0x80~0xFFFF来编码,即扩展的 ASCII 编码。为使计算机支持更多语言,通常使用 0x80~0xFFFF 范围的 2 个字节来表示 1 个字符。比如:汉字 ‘中’ 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、GB18030、Big5、Shift_JIS 等各自的编码标准。这些使用多个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。
在简体中文 Windows 操作系统中,ANSI 编码代表 GBK 编码;
在繁体中文 Windows 操作系统中,ANSI 编码代表 Big5;
在日文 Windows 操作系统中,ANSI 编码代表 Shift_JIS 编码;

.cpp文件以不同的格式保存,里面的字符串、中文等以不同的格式存储。QtCreator默认以utf-8存储。所以里面的字符串都是utf-8格式的。而virtual studio 则是以GBK格式存储的.cpp。所以里面的字符串是以ANSI(GBK)格式存储的。Qt中各不同编码的字符串,可以通过如下代码进行转换。

QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");
QTextCodec *gb18030 = QTextCodec::codecForName("GB18030");

QString strUnicode;
strUnicode = utf8->toUnicode(strAppPath.toLocal8Bit().data());
QByteArray gb_bytes;
gb_bytes = gb18030->fromUnicode(strUnicode);

char imagePath[256] = {0};
memcpy(imagePath, gb_bytes, gb_bytes.length());


//方法二
char chTest[256]={0};
QString devName = "中文字符测试";

std::string str = devName.toStdString();
const char *chTemp = str.c_str();
memcpy(chTest, chTemp, str.length() + 1);

Qt路径与VS路径区别

VC:路径使用'\\'(反斜杠) Qt:路径使用 '/'(斜杠)。VC的双斜杠其实是转义字符+\。

/转\(斜杠转反斜杠)
QString path = "C:/temp/test.txt";
path = QDir::toNativeSeparators(path);
"C:\\temp\\test.txt"

\转/(反斜杠转斜杠)
QString path = "C:\\temp\\test.txt";
path = QDir::fromNativeSeparators(path);
C:/temp/test.txt

同时生成Debug和Release版本,并且Debug版本名字后加d

CONFIG += debug_and_release
CONFIG += build_all
CONFIG(debug, debug|release) {
    unix:  TARGET = $$join(TARGET,,,_debug)
    win32: TARGET = $$join(TARGET,,,d)
}

DESTDIR += $$PWD/bin

动态库pro设置VERSION = 1.0.1901.0时,产生目标名字总会带数字1,数字为主版本号。

解决方法:CONFIG += skip_target_version_ext

stackedWidegt中的page页布局,需要打破上层父控件的布局才能布局page页

Qt下Unix时间10进制格式和实际时间的相互转换

1.秒级别:
1)10进制unix时间转换为实际时间:

QDateTime time = QDateTime::fromTime_t(1573394150);//转换为秒级别

2)实际时间转换为unix的10进制时间

QDateTime time = QDateTime::currentDateTime();   //获取当前时间默认到秒
int timeT = time.toTime_t();   //将当前时间转为时间戳
qDebug()<<"timeT="<<timeT;

2.毫秒 级别:
1)10进制unix时间转换为实际时间:

QDateTime time = QDateTime::fromMSecsSinceEpoch(1573031724139);//转换为毫秒级别

2)实际时间转换为unix的10进制时间

//把当前时刻的系统时间转换为unix的时间戳
qint64 curtime = QDateTime::currentMSecsSinceEpoch();
qDebug()<<"curtime ="<<curtime ;

//把时间转换为unix的时间戳,取当前时间以及往前推一年的时间
QDateTime endDateTime =  QDateTime::currentDateTime();
QDateTime startDateTime = endDateTime.addYears(-1);
qint64 startTime = startDateTime.toMSecsSinceEpoch();
qint64 endTime = endDateTime.toMSecsSinceEpoch();

cmakelist生成pro文件

cd到cmakelist文件夹下,使用shell命令:

qmake -project 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值