leix1234 发表于 2012-4-10 08:38:10

依然是QT编译问题

如题,按照QT程序开发手册之24小时超级版本中的步骤,在最后一步make的时候出现如下信息(我将first改成了second,因为第一次没成功,我又试了一遍):

# make
Makefile:122: 警告:覆盖关于目标“moc_second.cpp”的命令
Makefile:119: 警告:忽略关于目标“moc_second.cpp”的旧命令
g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG -I/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qt2/include -I/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/include -o moc_second.o moc_second.cpp
moc_second.cpp:15:34: 错误:private/qucomextra_p.h:没有那个文件或目录
moc_second.cpp:17:2: 错误:#error "This file was generated using the moc from 3.3.8b. It"
moc_second.cpp:18:2: 错误:#error "cannot be used with the include files from this version of Qt."
moc_second.cpp:19:2: 错误:#error "(The moc has changed too much.)"
moc_second.cpp:28: 错误:‘QMetaObjectCleanUp’没有命名一个类型
moc_second.cpp: In static member function ‘static QString second::tr(const char*, const char*)’:
moc_second.cpp:34: 错误:‘DefaultCodec’不是‘QApplication’的成员
moc_second.cpp: At global scope:
moc_second.cpp:39: 错误:成员函数‘QString second::trUtf8(const char*, const char*)’未在类‘second’中声明
moc_second.cpp: In static member function ‘static QMetaObject* second::staticMetaObject()’:
moc_second.cpp:55: 错误:‘QUMethod’没有命名一个类型
moc_second.cpp:56: 错误:‘QUMethod’没有命名一个类型
moc_second.cpp:57: 错误:‘QUMethod’没有命名一个类型
moc_second.cpp:59: 错误:‘slot_0’在此作用域中尚未声明
moc_second.cpp:60: 错误:‘slot_1’在此作用域中尚未声明
moc_second.cpp:61: 错误:‘slot_2’在此作用域中尚未声明
moc_second.cpp:62: 错误:‘const QMetaData’的初始值设定项太多
moc_second.cpp:62: 错误:‘const QMetaData’的初始值设定项太多
moc_second.cpp:62: 错误:‘const QMetaData’的初始值设定项太多
moc_second.cpp:71: 错误:对‘QMetaObject::new_metaobject(const char , QMetaObject*&, const QMetaData , int, int, int, int, int)’的调用没有匹配的函数
/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qt2/include/qmetaobject.h:197: 附注:备选为: static QMetaObject* QMetaObject::new_metaobject(const char*, const char*, QMetaData*, int, QMetaData*, int, QClassInfo*, int)
/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qt2/include/qmetaobject.h:200: 附注:         static QMetaObject* QMetaObject::new_metaobject(const char*, const char*, QMetaData*, int, QMetaData*, int)
moc_second.cpp:72: 错误:‘cleanUp_second’在此作用域中尚未声明
moc_second.cpp: At global scope:
moc_second.cpp:76: 错误:成员函数‘void* second::qt_cast(const char*)’未在类‘second’中声明
moc_second.cpp:83: 错误:‘QUObject’未声明
moc_second.cpp:83: 错误:成员函数‘bool second::qt_invoke(int, int*)’未在类‘second’中声明
moc_second.cpp:95: 错误:‘QUObject’未声明
moc_second.cpp:95: 错误:成员函数‘bool second::qt_emit(int, int*)’未在类‘second’中声明
make: *** 错误 1
#
对比后发现moc_second.h和例程里面的moc_first.h里面的内容差异有点大,有点怀疑是不是版本不同导致的,但是我是按照手册上操作的,怎么会有问题,劳烦诸位指点一二,谢谢!

leix1234 发表于 2012-4-10 08:42:26

问题补充:有一个地方不一样,我用天嵌提供的Qte包里面的designer时,发现这个软件有问题,就是不能输入,即不能更改名称或者打字进去(抱歉,我的表达有点凌乱)。然后就用系统自带的designer设计的ui界面。系统里的designer是3.0的,也有更高版本的,不过我用的是3.0版本的。

TQ-lkp 发表于 2012-4-10 09:04:12

本帖最后由 TQ-lkp 于 2012-4-10 09:04 编辑

你有没有编绎x86的QT?

leix1234 发表于 2012-4-10 09:11:56

TQ-lkp 发表于 2012-4-10 09:04 static/image/common/back.gif
你有没有编绎x86的QT?

有的,已经编译完成了。

leix1234 发表于 2012-4-10 09:14:23

问题补充:以下是moc_second.h的内容:

#undef QT_NO_COMPAT
#include "second.h"
#include <qmetaobject.h>
#include <qapplication.h>

#include <private/qucomextra_p.h>
#if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
#error "This file was generated using the moc from 3.3.8b. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif

const char *second::className() const
{
    return "second";
}

QMetaObject *second::metaObj = 0;
static QMetaObjectCleanUp cleanUp_second( "second", &second::staticMetaObject );

#ifndef QT_NO_TRANSLATION
QString second::tr( const char *s, const char *c )
{
    if ( qApp )
        return qApp->translate( "second", s, c, QApplication::DefaultCodec );
    else
        return QString::fromLatin1( s );
}
#ifndef QT_NO_TRANSLATION_UTF8
QString second::trUtf8( const char *s, const char *c )
{
    if ( qApp )
        return qApp->translate( "second", s, c, QApplication::UnicodeUTF8 );
    else
        return QString::fromUtf8( s );
}
#endif // QT_NO_TRANSLATION_UTF8

#endif // QT_NO_TRANSLATION

QMetaObject* second::staticMetaObject()
{
    if ( metaObj )
        return metaObj;
    QMetaObject* parentObject = QWidget::staticMetaObject();
    static const QUMethod slot_0 = {"btn1_c", 0, 0 };
    static const QUMethod slot_1 = {"btn2_c", 0, 0 };
    static const QUMethod slot_2 = {"languageChange", 0, 0 };
    static const QMetaData slot_tbl[] = {
        { "btn1_c()", &slot_0, QMetaData::Public },
        { "btn2_c()", &slot_1, QMetaData::Public },
        { "languageChange()", &slot_2, QMetaData::Protected }
    };
    metaObj = QMetaObject::new_metaobject(
        "second", parentObject,
        slot_tbl, 3,
        0, 0,
#ifndef QT_NO_PROPERTIES
        0, 0,
        0, 0,
#endif // QT_NO_PROPERTIES
        0, 0 );
    cleanUp_second.setMetaObject( metaObj );
    return metaObj;
}

void* second::qt_cast( const char* clname )
{
    if ( !qstrcmp( clname, "second" ) )
        return this;
    return QWidget::qt_cast( clname );
}

bool second::qt_invoke( int _id, QUObject* _o )
{
    switch ( _id - staticMetaObject()->slotOffset() ) {
    case 0: btn1_c(); break;
    case 1: btn2_c(); break;
    case 2: languageChange(); break;
    default:
        return QWidget::qt_invoke( _id, _o );
    }
    return TRUE;
}

bool second::qt_emit( int _id, QUObject* _o )
{
    return QWidget::qt_emit(_id,_o);
}
#ifndef QT_NO_PROPERTIES

bool second::qt_property( int id, int f, QVariant* v)
{
    return QWidget::qt_property( id, f, v);
}

bool second::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
#endif // QT_NO_PROPERTIES

TQ-lkp 发表于 2012-4-10 09:25:52

本帖最后由 TQ-lkp 于 2012-4-10 09:26 编辑

moc_文件是编绎过程中生成的,要看你的源程序其实主要是工程文件

leix1234 发表于 2012-4-10 09:29:56

TQ-lkp 发表于 2012-4-10 09:25 static/image/common/back.gif
moc_文件是编绎过程中生成的,要看你的源程序其实主要是工程文件

工程文件没问题啊,跟教程上的一样:
TEMPLATE        = app
CONFIG                = qtopia warn_on release
HEADERS                = second.h
SOURCES                = main.cpp \
                  second.cpp
INTERFACES        = second.ui

TQ-lkp 发表于 2012-4-10 09:37:03

你没有使用交叉编绎器

leix1234 发表于 2012-4-10 10:09:14

TQ-lkp 发表于 2012-4-10 09:37 static/image/common/back.gif
你没有使用交叉编绎器

发现问题在哪了,还是designer版本问题导致的,我用天嵌提供的designer设计出来的界面最后编译能通过,但是用系统里面的designer3.0设计的界面就会编译不通过,不过不知道为什么会这样,而且天嵌提供的designer在我电脑不能用,所以还是得想办法解决之啊!

TQ-lkp 发表于 2012-4-10 11:13:42

关于designer无法输入和显示不正常的问题,论坛中已经有相关的解决方法,大家多用下搜索

亚瑟王 发表于 2012-6-11 16:48:06

亲,缺少头文件可能是因为环境变量的问题或者是你的设计器不是针对qtopia而引起的。建议你用qtopia自带的设计器。

huwenming 发表于 2012-6-11 19:31:16

我的也是designer中键盘无法输入,,求解决方法

shenzhou654321 发表于 2012-9-9 23:25:42

同求啊,我也遇到这个问题啊
页: [1]
查看完整版本: 依然是QT编译问题