puzzle

本文分享了从QT3迁移到QT4过程中遇到的问题及解决办法,包括使用qt3to4工具、替代废弃函数、调整类用法、解决编译错误等方面的经验。
接了一个QT写小游戏的项目,找到一个QT3编写的比较不错的开源的,现在改写到QT4,遇到一些问题。
总结一下,首先需要先看看帮助中的Porting to Qt 4一节,详细介绍了迁移过程。下面是我自己开发中遇到的:
0。
可以使用qt工具qt3to4把Qt3的程序代码移植成QT4

1。有些函数,在QT4中以打算不支持,使用#ifdef QT3_SUPPORT宏进行控制,如果用户仍然想用这些函数,需要在编译的时指定这个宏。但不建议使用旧版本的函数啦,所以,你可以查看旧函数的源代码,自己直接调用它调用的其他代替函数。比如QDialog有个setCaption函数,我们可以使用setWindowTitle来代替,等等。

2。
有些类也进行了修改,如QButtonGroup的基类由QWidget改成了QObject,因此变成了不可见的widget了。不在有标题以及其他界面的函数,也不能直接和layout进行关联。这个时候我们可以借助QGroupBox 来实现原来QButtonGroup的一些旧的和界面相关的功能。参考下下面的例子:
http://hi.baidu.com/ediwon/blog/item/9a28e21196147cc6a6ef3f94.html

3。
有些类名字改变了,或者没有了。如,QListBox 改变成了Q3ListBox。

4。QT4中,Qstring 转换const char*
方法一:
QString qstr("hello,word");
const char * p = qstr.toLocal8Bit().data();
方法二:
const char *p = qstr.toStdString().data();
转换过来的是常量

5.
windows下使用VS2003环境编译QT程序有的时候,有时出错:
c1xx : fatal error C1083: 无法打开源文件:“./GeneratedFiles/debug/moc_piecewidget.cpp”: No such file or directory
LINK : fatal error LNK1104: 无法打开文件“./Debug/moc_piecewidget.obj”
无法解析的外部命令qmetaobject
是因为没有生成moc文件,使用moc在命令行下可以进行编译
同时在集成开发环境中,可以修改*.vcproj文件中,在头文件一节修该,加入moc等命令,如下
<File>
                RelativePath
=".srcprefs.h">
</File>

<File
                
RelativePath=".srcprefs.h">
                
<FileConfiguration
                    
Name="Release|Win32">
                    
<Tool
                        
Name="VCCustomBuildTool"
                        Description
="Moc&apos;ing prefs.h..."
                        CommandLine
="$(QTDIR)inmoc.exe -IGeneratedFiles -I$(QTDIR)include -I.GeneratedFilesRelease -I$(QTDIR)includeQtCore -I$(QTDIR)includeQtGui &quot;.srcprefs.h&quot; -o &quot;GeneratedFilesReleasemoc_prefs.cpp&quot;
"

                        AdditionalDependencies
="$(QTDIR)inmoc.exe;.srcprefs.h"
                        Outputs
="&quot;GeneratedFilesReleasemoc_prefs.cpp&quot;"/>
                
</FileConfiguration>
                
<FileConfiguration
                    
Name="Debug|Win32">
                    
<Tool
                        
Name="VCCustomBuildTool"
                        Description
="Moc&apos;ing prefs.h..."
                        CommandLine
="$(QTDIR)inmoc.exe -IGeneratedFiles -I$(QTDIR)include -I.GeneratedFilesDebug -I$(QTDIR)includeQtCore -I$(QTDIR)includeQtGui &quot;.srcprefs.h&quot; -o &quot;GeneratedFilesDebugmoc_prefs.cpp&quot;
"

                        AdditionalDependencies
="$(QTDIR)inmoc.exe;.srcprefs.h"
                        Outputs
="&quot;GeneratedFilesDebugmoc_prefs.cpp&quot;"/>
                
</FileConfiguration>
            
</File>
最后在后面的生成文件中加入:
<Filter
            Name
="Generated Files"
            Filter
="moc;h;cpp"
            UniqueIdentifier
="{71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11}">
            
<File
                RelativePath
=".generatedfilesdebugmoc_gamedialog.cpp">
                
<FileConfiguration
                    Name
="Release|Win32"
                    ExcludedFromBuild
="TRUE">
                    
<Tool
                        Name
="VCCLCompilerTool"/>
                
</FileConfiguration>
            
</File>
            
<File
                RelativePath
=".generatedfiles eleasemoc_gamedialog.cpp">
                
<FileConfiguration
                    Name
="Debug|Win32"
                    ExcludedFromBuild
="TRUE">
                    
<Tool
                        Name
="VCCLCompilerTool"/>
                
</FileConfiguration>
            
</File>
</Filter>
具体的实现,可以使用VS向导生成的文件,对照有问题的部分,仿照着修改就可以了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值