• 12767阅读
  • 13回复

QT 线程中怎么不能创建QWidget窗体吗? [复制链接]

上一主题 下一主题
离线wanglei2258
 

只看楼主 倒序阅读 楼主  发表于: 2009-08-24
QT线程中创建一个类继承Qt的线程,然后在线程类中实现创建QWidget窗体,但是运行的时间出错?有知道怎么解决的吗?
QT
离线dbzhang800

只看该作者 1楼 发表于: 2009-08-24
把你的标题改成肯定句就对了。
离线visitorone

只看该作者 2楼 发表于: 2009-08-25
最好把错误发出来把。
离线lbblscy

只看该作者 3楼 发表于: 2009-08-25
GUI对象只能在主线程中创建
离线wanglei2258

只看该作者 4楼 发表于: 2009-08-27
哪有什么办法解决吗?
QT
离线20044454
只看该作者 5楼 发表于: 2009-08-27
用信号 和槽函数 把数据传到主线程上去
让我做一个Qt的大牛!!!!
离线wanglei2258

只看该作者 6楼 发表于: 2009-08-27
我想通过下面的代码 实现线程的线程中调用窗体 但是发送的信号好像不执行,有兴趣的可以执行下。谢谢了  帮帮忙?

main.cpp
#include <QtGui/QApplication>
#include <QTextCodec>
#include <string.h>
#include "widget.h"
#include "thread.h"
using namespace std;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);  
    
    Thread t;
    t.start();

    return a.exec();
}

thread.h
#ifndef THREAD_H
#define THREAD_H

#include <QThread>
#include <QTimer>

class Thread : public QThread
{
    Q_OBJECT
public:
    Thread();
    virtual void run();

protected slots:
    void Display();

private:
    QTimer *m_pTimer;
};
#endif // THREAD_H

thread.cpp
#include "thread.h"
#include "widget.h"

Thread::Thread()
{  
    
}

void Thread::run()
{
        qDebug("if");
        m_pTimer = new QTimer();
        connect(m_pTimer, SIGNAL(timeout()), this, SLOT(Display()));
        m_pTimer->start(15);
}

void Thread::Display()
{
    qDebug("begin");
    Widget w;
    w.show();
}

widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QtGui/QWidget>
#include <QtGui/QLabel>
#include <QApplication>

class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget();
};

#endif // WIDGET_H

widget.cpp
#include <QtGui/QHBoxLayout>
#include <QDesktopWidget>
#include <QMoveEvent>
#include "widget.h"
Widget::Widget()
{
    //初始化窗体
    setWindowFlags(Qt::Dialog);   //窗体没有最大化最小化按钮
    setFixedSize(250, 100);  //设置窗体的大小
    setWindowTitle(tr("信息提示"));    //设置QWidget抬头信息

    //最前端显示
    Qt::WindowFlags flags = Qt::Widget;
    flags |= Qt::WindowStaysOnTopHint;
    setWindowFlags(flags);
}
[ 此帖被wanglei2258在2009-08-30 14:41重新编辑 ]
QT
离线wanglei2258

只看该作者 7楼 发表于: 2009-08-28
没有人做过吗?自己顶下!
QT
离线beajisong

只看该作者 8楼 发表于: 2009-08-29
去研究一下信号槽子系统
gui只能在主线程中呗处理
离线dbzhang800

只看该作者 9楼 发表于: 2009-08-29
引用第6楼wanglei2258于2009-08-27 17:16发表的  :
我想通过下面的代码 实现线程的线程中调用窗体 但是发送的信号好像不执行,有兴趣的可以执行下。谢谢了  帮帮忙?
main.cpp
#include <QtGui/QApplication>
#include <QTextCodec>
.......


不是打击你,你真的需要好好看看Qt的手册或demo,或者找本Qt的书好好看看。

你贴的代码中暴露的问题蛮多。

关于线程和GUI线程通讯的问题,论坛中很多讨论了,你也可以搜一下

在下面的帖子中,我贴过一个非常简化的例子,你也可以看一下
http://qtcn.org/bbs/read.php?tid=20541&keyword=%CF%DF%B3%CC
离线wanglei2258

只看该作者 10楼 发表于: 2009-08-30
我的意思是行如像QQ那样的当有消息的时间就弹出窗体提示,提示后要关闭的,并不是一直显示的。
QT
离线dbzhang800

只看该作者 11楼 发表于: 2009-08-30
引用第10楼wanglei2258于2009-08-30 15:18发表的  :
我的意思是行如像QQ那样的当有消息的时间就弹出窗体提示,提示后要关闭的,并不是一直显示的。


这个和线程有什么关系呢?
即使你要弹出几十个窗口出来,一个主线程(GUI)也都够了,不存在多线程的问题么??
离线jdwx

只看该作者 12楼 发表于: 2012-12-06
回 12楼(zza911025) 的帖子
广告
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线XChinux

只看该作者 13楼 发表于: 2012-12-06
干掉广告,
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个