依然是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里面的内容差异有点大,有点怀疑是不是版本不同导致的,但是我是按照手册上操作的,怎么会有问题,劳烦诸位指点一二,谢谢! 问题补充:有一个地方不一样,我用天嵌提供的Qte包里面的designer时,发现这个软件有问题,就是不能输入,即不能更改名称或者打字进去(抱歉,我的表达有点凌乱)。然后就用系统自带的designer设计的ui界面。系统里的designer是3.0的,也有更高版本的,不过我用的是3.0版本的。 本帖最后由 TQ-lkp 于 2012-4-10 09:04 编辑
你有没有编绎x86的QT? TQ-lkp 发表于 2012-4-10 09:04 static/image/common/back.gif
你有没有编绎x86的QT?
有的,已经编译完成了。 问题补充:以下是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:26 编辑
moc_文件是编绎过程中生成的,要看你的源程序其实主要是工程文件
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 static/image/common/back.gif
你没有使用交叉编绎器
发现问题在哪了,还是designer版本问题导致的,我用天嵌提供的designer设计出来的界面最后编译能通过,但是用系统里面的designer3.0设计的界面就会编译不通过,不过不知道为什么会这样,而且天嵌提供的designer在我电脑不能用,所以还是得想办法解决之啊! 关于designer无法输入和显示不正常的问题,论坛中已经有相关的解决方法,大家多用下搜索 亲,缺少头文件可能是因为环境变量的问题或者是你的设计器不是针对qtopia而引起的。建议你用qtopia自带的设计器。 我的也是designer中键盘无法输入,,求解决方法 同求啊,我也遇到这个问题啊
页:
[1]