Qt笔记

2018-09-04 112

在代码中使用中文的字符串(C++11)

u8"这是中文"

Qt5 + MSVC2017中文报错"常量中有换行符"

将所有文件保存为UTF8 + BOM的格式即可

Qt Creator双开两个程序(实例)

Tools -> Options -> Build & Run -> General -> Stop applications before building里的Same Project改成None即可

QDataStream的一些坑

这输出的绝对不是sizeof int!因为QDataStream有一套自己的数据存储协议,类似json一样吧

QTcpServer获得的nextPendingConnection不能被moveToThread

将获得的nextPendingConnection进行setParent(nullptr)即可...

Qt中的多线程与事件循环

假设我们有一个QThread *thread

qt里的object.moveToThread(thread)会将该objectsignalslot变到thread的子线程里,也就是我们在如果在某个connect里,信号是主线程发出来的,然后槽是这个object的,那么qt会将object的槽放到thread的子线程里执行。

但是请注意,子线程必须要开启事件循环exec(),才能对这些connect的事件进行相应的操作。而QThread::start()这个函数并不会开启事件循环!

因此我们必须继承一个QThread,改写一下QThread::run(),在最后一行加上exec(),这样就开启了子线程的事件循环。

QTcpSocketreadyRead的坑

注意,一次readyRead信号发出后,socket获得的数据是永远不会再变了的!无论你怎么wait!所以你不可能在一次readyRead信号发出的时候,就将整个传输的数据读完(假设数据很大,一次读不完),一直在里面readAll()或者read()是永远得不到新数据的

欢迎留言>_<

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据