个人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开发经验_第1张图片

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

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

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

个人QT开发经验_第2张图片

生成debug和release文件

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

修改为

./%{CurrentBuild:Name}

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());

 

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

 

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="<

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

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

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

qint64 time = QDateTime::currentMSecsSinceEpoch();
qDebug()<<"time="<

 

你可能感兴趣的:(QT)