• 4937阅读
  • 4回复

qt3 编译线程时这种报错该怎么解决啊???????高人指点 [复制链接]

上一主题 下一主题
离线zhanglele
 
只看楼主 正序阅读 楼主  发表于: 2008-11-26
— 本帖被 XChinux 执行加亮操作(2008-11-30) —
moc_thread.cpp:54: 错误: ’staticMetaQbject‘  不是QThread 的成员
。。。。。。。。。 错误: ‘qt_cast’不是 'QThread' 的成员

。。。。。。。。。错误:  'activate_signal' 没有声明 在 traceLog中

。。。。。。。。。。。:  ‘qt_invoke’不是 'QThread' 的成员

。。。。。。。。。。。:  'qt_emit'  不是 'QThread' 的成员


。。。。。。。。。。。。:  'qt_property' ...........................
config里面 我加了 thread了

我在线程类里 定义了信号 想把线程中的字符串 显示到界面上:
class Thread: public QThread
{
  .......
.  .......
  signals:
    void traceLog(const QString str);
}

void Thread::traceLog(const QString str)
{
  messageStr =str;
}

void Thread:: run()
{
  ....
  ......
  emit traceLog(temp);
  .......
}

界面线程里是这样的:
dialog.cpp 文件中:
{
    .......
    connect(&Thread, SIGNAL (traceLog(const QString)),this, SLOT(getTraceLog(const QString)));
    ...........
}

在dialog.h中定义:
{
  ...............
      virtual void getTraceLog(const QString);
  .........
}

在 dialog.ui.h中
定义的:
void dialog :: getTraceLog(const QString)
{
    recvEdit->append(messageStr);
}
小弟第一次在线程里 用 信号 槽 不知道这种布局 对不对 以上错误是不是 由于写法不对 而产生的
请高人指点啊
离线foxyz

只看该作者 4楼 发表于: 2008-12-04
Q_OBJECT是宏定义,如果你定义了你自己的signal和slot那么就要在你的class里边加上这个宏定义。请看相关帮助。这样在编译的时候会产生相应的moc_XXX.cpp文件
离线xjcook

只看该作者 3楼 发表于: 2008-12-04
不是需要头文件,在你类定义中加入Q_OBJECT就可以了,
如果你定义了自己的信号或者槽的话,需要加这个定义
他会被MOC处理,把你定义的信号或者槽变成C++ 认识的代码。
离线zhanglele
只看该作者 2楼 发表于: 2008-11-27
需要什么头文件? 我加了 qvariant.h 的头文件的?
[ 此贴被zhanglele在2008-11-27 10:56重新编辑 ]
离线water_wf

只看该作者 1楼 发表于: 2008-11-26
Q_OBJECT 没在类头中
快速回复
限100 字节
 
上一个 下一个