Qt子线程更新UI的方法

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

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


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


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

你可能感兴趣的:(Qt)