欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

qt线程创造窗体

更新时间: 2014-01-05 02:44:17 责任编辑: Author_N1

 

Qt线程创建窗体
如题:
    如何在一个Qt线程中,实现一个Widget的创建
--参考方法--
据我了解 GUI 的东西 只能在GUI 线程 就是主线程 里 创建
--参考方法--
QWidget(界面控件)不是线程安全的,建议界面都是在主线程中操作即GUI线程,建议楼主放弃这种想法
--参考方法--
发送信号给主线程,在主线程里操作UI。
--参考方法--
引用:
嗯 我后面已经尝试过了,通过线程做的话,运行程序直接崩溃,发信号的方式也我尝试了,GUI主线程收不到这个信号
请问还有谁能有好办法?
在启动主程序到,主窗体出来,要一段时间,因为后台要处理很多的事,要弄一个等待框,这个窗体要放gif图片,可是在登陆界面点下确认时就显示,可是等待框中的gif图片无法播放,处于停止的
求高手呀。。。。。。。求助呢
谢谢大家,看到的朋友帮忙顶下,在线等呀。。。


QSplashScreen做个启动界面, 注册一个回调函数给你后台时不时的调用用来更新GIF动画, 
按你的描述,什么事件信号都是没用的,你连app.exe()都没进, 
简单点就直接用QSplashScreen做个静止的画面
--参考方法--
引用:
嗯 我后面已经尝试过了,通过线程做的话,运行程序直接崩溃,发信号的方式也我尝试了,GUI主线程收不到这个信号
请问还有谁能有好办法?

线程操作UI明显是不妥当的行为。在Qt 5.1之前的版本线程之间也尽量不要用信号与槽,而要用Event。从5.1开始就可以发信号了。换个新Qt试试?

--参考方法--
1,线程刷新或者创建UI会出现崩溃问题,解决方法很简单,就是用信号和槽; 
具体操作方法是,
1).定义一个公共单件类(类似ios中的notifycenter)用了发射信号;
2).该类提供一函数供线程调用,在函数中emit信号
3).在界面UI中connect 2中的信号,定义槽函数来实现UI更新或者绘制。
ps:信号和槽是qt很重要的一个通讯工具,已经很成熟了。我目前用的qt版本是4.7.3,工作的很好;


2.gif问题
QMovie *movie = new QMovie(file);
    QLabel->setMovie(movie);
    movie->start();



#ifndef CLABELWAIT_H
#define CLABELWAIT_H

#include <QLabel>

class CLabelWait : public QLabel
{
    Q_OBJECT
public:
    explicit CLabelWait(QWidget *parent = 0);

    void SetImageFile(QString file);
signals:

public slots:

};

#endif // CLABELWAIT_H



#include "clabelwait.h"
#include <QMovie>

CLabelWait::CLabelWait(QWidget *parent) :
    QLabel(parent)
{
}

void CLabelWait::SetImageFile(QString file)
{
    QMovie *movie = new QMovie(file);
    this->setMovie(movie);
    movie->start();
}

ui->label->SetImageFile(":/img/loading.gif");
--参考方法--
教你个偷懒的办法,不要开线程,直接在繁重的工作里面加上processEvent(),很方便,但不是个好设计
--参考方法--
这个,前边很多人提到了:官方文档也说了,不要在子线程中处理UI。所以楼主不要执著于在
子线程中操作UI.
2,如果要主线程中的UI不阻塞,请使用QApplication::processEvents()
3,线程之间使用signal-slot是非常好的一种选择,比使用postEvent 的方式来说降低了耦合度。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:44:17
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/13772/
本文WWW.DOC100.NET DOC100.NET版权所有。