编译qtopia2.2.0的一个问题

在编译2.2.0中遇到了大量如下类似错误,每次改动一下,编译后又出现新的类似错误,很烦躁。
error: no matching function for call to `QSizePolicy::QSizePolicy(QSizePolicy::SizeType, QSizePolicy::SizeType, int, int, bool)'
网上看到一些这样的解决办法:

qtopia-free-2.2.0/qtopia/src/libraries/qtopia/.ui/release-shared/passwordbase_p.cpp 文件中的38行位置
prompt = new QLabel( this, "prompt" );
prompt->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)1, 0, 0, prompt->sizePolicy().hasHeightForWidth() ) );
修改为:
prompt = new QLabel( this, "prompt" );
prompt->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)1, prompt->sizePolicy ().hasHeightForWidth() ) );


可是每次这样改一次编译一下,实在是扛不住啊……
这个问题可以这样解决:

修改源文件:
qtopia-free-2.2.0/qt2/include/qsizepolicy.h
在此处有该类的定义,通过函数重载定义了2个构造函数,只关心其中一个

复制此行:
QSizePolicy( SizeType hor, SizeType ver, bool hfw = FALSE );
在复制的一行中形参添加2个int( 注意,原行要保留):
QSizePolicy( SizeType hor, SizeType ver,int,int, bool hfw = FALSE );
同时也要修改最下边的inline函数,添加2个int形参。
为什么要复制一行,而不是直接在原来的QSizePolicy函数声明中修改呢?

由内联函数上下的预处理语句,在源代码下进行索引,可以知道:大部分文件都用该文件中的inline定义的QSizePolicy构造函数,在未修改前,inline所定义构造函数对应文件上边的声明QSizePolicy( SizeType hor, SizeType ver, bool hfw = FALSE );,因此修改时对这两处都要添加int int。
但是有一些cpp文件没有用inline定义的构造函数,而是在需要用的时候自己的cpp文件内部定义的该函数。因此,对于这类文件,原来的构造函数声明应该保留,用来给这类文件使用,如果直接删除会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值