Qt子线程更新UI的方法

     最近刚刚接触一个qt项目,因为原始程序中的listwidget里有大量的item,每个item都有一个按钮,这样致使程序运行起来后,生成按钮的速度很慢,严重影响了软件的使用体验。因而将生成按钮的操做放到子线程中。一开始我是直接在子线程中生成按钮来更新UI的,发现编译能够经过,可是运做时报错。上网查资料,才发现是Qt里只有UI线程才能够更新UI,子线程要更新UI,能够经过使用信号-槽函数机制,在子线程里发送信号,而后将信号与UI线程(即主函数)中的slot函数connect,这样子线程运行时,将信号传送到消息队列,UI线程从消息队列依次取出信号,调用相应的slot函数响应。从而达到更新UI界面的目的。html

     子线里面的信号函数只须要声明,不须要定义。当子线程与UI线程传递的不是qt元类型的数据时,要注册消息。子线程定义时要包括Q_OBJECT宏。具体代码见函数


http://blog.csdn.net/slj_win/article/details/6856428ui


http://blog.chinaunix.net/uid-26808060-id-3355832.html.net