首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

Qt线程创造窗体

2013-11-05 
Qt线程创建窗体如题:如何在一个Qt线程中,实现一个Widget的创建[解决办法]据我了解 GUI 的东西 只能在GUI

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 的方式来说降低了耦合度。

热点排行