(1)qudpsocket接收数据
进入槽后,要用这种方式读取,否则可能会导致不发readyread()信号 。
while(udpsocket->bytesavailable())
{
udpsocket->readdatagram(ch,size);
}
(2)qtcpsocket删除
一定要用deletelater
一定要用deletelater
一定要用deletelater
否则会导致用户对象溢出
(3)运行文件附带调试输出窗口
config += console pro
配合->http://github.com/851896022/qlog
(4)可以在pro文件中写上标记版本号+ico图标
version = 2019.08.08
rc_icons = main.ico
(5)解决socket传输后等中文乱码
转成base64传输
qbytearray(qstring.tostdstring().data()).tobase64()
(6)qt连接mysql后,长时间无操作(默认8小时)会断开。
isopen()等函数无法判断,需执行sql语句才能发现失败
qsqldatabase.setconnectoptions("mysql_opt_reconnect=1");
↑断开后可自动重连
(7)在槽使用sender()函数可获取到发出信号的对象的指针。
(8)子线程中使用qaxwidget不成功,原因是在qapplication的主线程中,会自动初始化com库,而新开辟的子线程不会自动初始化com库,所以需要我们手动来初始化。
//添加头文件
#include <windows.h>
//在线程开始的时候初始化com库:
hresult r = oleinitialize(0);
if (r != s_ok && r != s_false)
{
qwarning("qt:初始化ole失败(error %x)",(unsigned int)r);
}
使用结束后需要释放掉:
oleuninitialize();
(9)file.write()以后调用file.flush()避免数据在缓存中未成功写入。
(10)延时。
{
qeventloop loop;
qtimer t;
connect(&t,signal(timeout()),&loop,slot(quit()));
t.start(1000);
loop.exec();
}
(11)别用qwidget布局,别问我怎么知道的。
(12) 对qlcdnumber控件设置样式,需要将qlcdnumber的segmentstyle设置为flat。
(13)qtimer::singleshot 计时器单次触发,有时会有意想不到的效果
(14)qbytearray 有tohex 有fromhex 有tobase64有frombase64