今天继续折腾Qt玩,在网上找了一个qt4写的单机版斗地主小游戏源码,准备自己研究一下,我是在mac系统下安装的qt5.5版本,所以需要修改一个才能编译成功! (我也不知道都需要修改那些代码 先编译一下 哪里报错改哪里)
第一个错误: fatal error: ‘QFrame’; file not found
这个问题我之前遇到过,这是应为Qt5已经废弃了 QFrame了
需要把 #include **
然后在项目的 .pro文件里 添加一行 QT += widgets
然后编译运行,这个报错已经解决,但是又出现新的错误提示
error: ‘QtGui/QAction’; file not found
#include <QtGui/QAction>
^
经过一番谷歌后,原来是原因Qt5的源文件位置的改动而造成的 造成的,把所有源码<QtGui/xxxx> 的头文件修改为 这种***(注意:前提是项目的.pro文件里 已经添加了 QT += widgets 这一行配置)***
例如头文件:
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QFrame>
#include <QtGui/QGridLayout>
#include <QtGui/QHeaderView>
#include <QtGui/QLabel>
#include <QtGui/QSpacerItem>
修改为:
#include <QAction>
#include <QApplication>
#include <QButtonGroup>
#include <QFrame>
#include <QGridLayout>
#include <QHeaderView>
#include <QLabel>
#include <QSpacerItem>
修改后保存,编译一下你就会发现刚才的报错已经没有了,但是又出现了新的问题
###error: no member named ‘UnicodeUTF8’; in ‘QApplication’; 如下图:
报错代码:
void retranslateUi(QFrame *MarkBoard)
{
MarkBoard->setWindowTitle(QApplication::translate("MarkBoard", "MarkBoard", 0, QApplication::UnicodeUTF8));
label->setText(QApplication::translate("MarkBoard", "me", 0, QApplication::UnicodeUTF8));
myMark->setText(QString());
label_3->setText(QApplication::translate("MarkBoard", "left robot", 0, QApplication::UnicodeUTF8));
leftMark->setText(QString());
label_5->setText(QApplication::translate("MarkBoard", "right robot", 0, QApplication::UnicodeUTF8));
rightMark->setText(QString());
} // retranslateUi
详细报错提示:
/Users/zploo/Desktop/Qt/code/day6/LordCardGame/ui_MarkBoard.h:105:
error: no member named ‘UnicodeUTF8’; in ‘QApplication’;
MarkBoard->setWindowTitle(QApplication::translate(“MarkBoard”, “MarkBoard”, 0, QApplication::UnicodeUTF8));
出现这个问题是因为*** QCoreApplication::UnicodeUTF8 在Qt5中已被弃用了***,直接把这个参数去掉即可
修改后的代码如下:
void retranslateUi(QFrame *MarkBoard)
{
MarkBoard->setWindowTitle(QApplication::translate("MarkBoard", "MarkBoard", 0));
label->setText(QApplication::translate("MarkBoard", "me", 0));
myMark->setText(QString());
label_3->setText(QApplication::translate("MarkBoard", "left robot", 0));
leftMark->setText(QString());
label_5->setText(QApplication::translate("MarkBoard", "right robot", 0));
rightMark->setText(QString());
} // retranslateUi
报错编译,上面的已经解决,又出现下面的报错提示
error: no type named ‘WFlags’; in namespace ‘Qt’;; did you mean ‘QFlag’;?
详细报错提示:
/Users/zploo/Desktop/Qt/code/day6/LordCardGame/MainFrame.h:15: error: no type named ‘WFlags’; in namespace ‘Qt’;; did you mean ‘QFlag’;?
MainFrame(QWidget *parent = 0, Qt::WFlags flags = 0);
^~~~~~~~~~
QFlag
因为Qt5中 WFlags 已经更名为 WindowFlags了
解决办法:
把WFlags 换成 WindowFlags 即可
MainFrame(QWidget *parent = 0, Qt::WFlags flags = 0);
//修改成下面这样即可
MainFrame(QWidget *parent = 0, Qt::WindowFlags flags = 0);
error: use of undeclared identifier ‘qInstallMsgHandler’;; did you mean ‘qInstallMessageHandler’;?
详细报错提示:
/Users/zploo/Desktop/Qt/code/day6/LordCardGame/main.cpp:33:
error: use of undeclared identifier ‘qInstallMsgHandler’;; did you mean ‘qInstallMessageHandler’;?
qInstallMsgHandler(myMessageOutput);
^~~~~~~~~~~~~~~~~~
qInstallMessageHandler
出错原因:
在Qt5中 qInstallMsgHandler 函数已经被废弃了 可按报错提示修改为: qInstallMessageHandler
修改后 MessageOutput 要多加一个参数 : QMessageLogContext& Context
void MessageOutput( QtMsgType type, const QMessageLogContext& Context, const QString &sMsg )
并且要把 QtMsgHandler 改为 QtMessageHandler
— — — — — — — — — — — — — — — — — — — — — —
其他问题暂时没有遇到,就先记录那么多把!
最后修改于 2016-01-11