1、信号槽
想使用信号槽,需要继承public QWidget类
并在类中定义宏Q_OBJECT
2、GBK编码
QT的中文是UTF8编码且会自动把gbk编码转换成utf8编码
3、多线程
QT的线程是异步模型,需要把socket传到线程中,这个socket才能在子线程运行。
QT的线程模型和MFC不一样,是异步可重入模型,通过信号和槽来通信。之前很多同步的操作不太好实现。槽函数不能延时,循环sleep10ms发送数据槽函数会在最后一起发而不是单次。串口和网口只能在本线程调用,没有全局指针。
在qt中使用多线程,以前的方法创建一个自己的thread的类,继承与QThread,然后重写run方法,从而实现多线程。交新版本的qt出现了movetoThread方法实现多线程。该方法由于使用起来比较灵活,得到广发应用。
首先要创建一个继承QObject的类(myobject),然后new一个Qthread,并把创建的myobject类movetothread到创建好的子线程中,然后start子线程,这样就实现了一个子线程。主线程通过发送信号,调用myobject中的方法,从而实现在子线程中的计算。
run()
该案例中,WorkerThread 存在于实例化它的旧线程中,