




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
QT 编程类定义后面要加”;”函数的实现部分,如果定义部分有void,则实现部分不能少;检查include文件有无少;error: request for member show in (MainWindow*)this)-MainWindow:rightform, which is of non-class type RightForm*|“-”与”.”问题函数”()”千万不能少;connect中的SLOT里的自定义过程的申明一定要写在private slots:(或public slots:)下QTableWidgetItem *newItemName = new QTableWidgetItem(tr(“姓名”);newItemName-setFlags(newItemName-flags() & (Qt:ItemIsEditable);/网格设置为只读tblWidgetMingPian-setItem(0, 0, newItemName);newItemName = new QTableWidgetItem(tr(“陈林& (Qt:ItemIsEditable);tblWidgetMingPian-setItem(0, 1, newItemName);tblWidgetMingPian-verticalHeader()-hide();tblWidgetMingPian-horizontalHeader()-hide();tblWidgetMingPian-setRowHeight(0,25);tblWidgetMingPian-setRowHeight(1,25);tblWidgetMingPian-setRowCount(2);connsql.htblWidgetMingPian-setColumnWidth(0,60);tblWidgetMingPian-setColumnWidth(1,100);if 里面的语句要加括号 if (条件)枚举类型的定义:typedef enumnil,ready,fired,exceptionalStatus;QString text = tr(“%1 %2).arg(i + 1).arg(filesi);Error:ISO C+ forbids declaration of NavItem with no type如果出现以上的错误,其中NavItem是自定义类,则需检查有没Include进此类的定义头文件,并检查头文件的#ifndef中的名称跟其他类有没重复(在复制其它类生成新类时经常会出现这样的错误)=mingwliblibmingw32.a(main.o):main.c:(.text+0104)|undefined reference to WinMain16|往pro文件按顺序加入下面三行:-lmingw32 -lSDLmain -lSDL sdl库中文件(sdl.h)里将 #include “SDLMain.h” 注释掉,否则qDebug(),printf全部无法显示有可能使用 #pragma message()造成,方法:不使用#pragma message()另:请检查 pro文件里有没INCLUDE入 main.cpp=cannot open output file debugumpcphonegui.exe: Permission denied产生此问题是由于文件umpcphonegui.exe受到保护,写不进去,打开任务管理器结束掉此进程就好了=pages.h|16|error: expected class-name before token|= Build finished: 1 errors, 0 warnings =|处理方法:没有include进所需的类链接时提示”undefind reference to vtable for xxx错误的处理方法: 重新makefile试下或工程文件(.pro)中的HEADERS中没有加入定义该类的.h文件;另一原因,虚函数(或调用的虚函数)定义后没有加”=0;int x,y;setupUi(this);this-move(10,60);this-resize(338,568);x = this-x() + this-frameGeometry().width();y = this-y() + 20 ;/showMaximized();rightform = new RightForm;rightform-move(x,y);ERROR:undefined reference to RightGpsForm:RightGpsForm(QWidget*)工程文件(*.pro)文件中的Source没有加入RightGpsForm类实现的.cpp文件头部定义有误,需检查头部名称跟文件名是否一样;尝试重编译error: ISO C+ forbids declaration of GPSMainWindow with no type|类的定义GPSMainWindow(gpsmainwindow.h)中的#ifndef MAINWINDOW_H_INCLUDED#define MAINWINDOW_H_INCLUDED头部定义有误,需检查头部名称跟文件名是否一样;#include 时,提示下面的错误:QList: No such file or directory解决方法:Project-build options-选择整个工程(左侧第一项)切到右边的页”Search directories”增加”$(#qt4.include)QtGuiQtCore”QT中的目录用”/”表示应用程序目录:QCoreApplication:applicationDirPath().append(tr(“/world.png”);=QSS:设置TabWidget中的Tab页高度QTabBar:tab height: 14ex;width: 14ex;=TRACE_SUBSYSF(MYRUNLEVEL,MYMODULENAME,QString(QObject:tr(“测试数据”)10);TRACE_LEVEL=5 TRACE_SUBSYS=MAIN /d/study/umpcapp/umpcapp-dev-1.0.0/gpsapp/debug/gpsapp.exeTRACE_SUBSYSF(5,”GUIAPP”,QString(QObject:tr(“构造函数创建完毕”)10);TRACE_SUBSYSF(5,”GUIAPP”,tr(“构造函数创建完毕”)addItem(“a”);/ listWidget-addItem(“b”);/ QVariant var;/ var.setValue (new int(789098);/ listWidget-item(0)-setData(Qt:UserRole,var);/ int* ptr = listWidget-item(0)-data(Qt:UserRole).value ();/ qDebug() “RecentNoteListForm:RecentNoteListForm:” *ptr item(0)-data(Qt:UserRole);删ITEM方法:把把ITEM的数据挂到指针上,先删ITEM,然后再删除指针如果发生 no such file or directory not find(报QT核心文件错)有可能是project propertiesprojects settings中的”This is a custom MakeFile”没有勾选;检查.pro文件是 INCLUDEPATH += DEPENDPATH+= 有没加入文件所在的目录检查.pro文件是否引入两个版本不同的相同文件名的文件;Qt += GUI=枚举类型做为信号的参数,则需对枚举类型进行注册在include中/定义Enumtypedef enumProgressType,StartType,SuccessType,StopTypeSyncMsgType;/定义结构typedef struct /实际使用中可以多增加些结构成员SyncMsgType msgtype;SyncMsg;Q_DECLARE_METATYPE(SyncMsg)在应用程序.CPP中/连接之前再注册qRegisterMetaType(“SyncMsg”);connect(gpssyncthread, SIGNAL(syncMsgNotify(SyncMsg),this, SLOT(syncMsgEvent(SyncMsg);=QList listItemDatas;for (QList:iterator it=listItemDatas.begin(); it!=listItemDatas.end() ; +it)(*it)-colName;=error: multiple types in one declaration自定义的类 后面没有”;”还有一种可能是pro文件中引用了两次单元文件;重编译方法=expected unqualified-id before “int”前一句的”;”误写为”,”=在Bulid工程时,qmake *.pro死循环,原因:pro文件里同一文件包含两次;=char *const p ; p所指向的值不能变;char cont *p; P所指向的地址不能变;=error: nameLineEdt was not declared in this scope函数域没有写; (函数域:函数名()ifdef/define重覆=int main(int argc, char *argv)Q_INIT_RESOURCE(qtdam);QApplication app(argc, argv);QSplashScreen *splash = new QSplashScreen;QString path=app.applicationDirPath();IDIOMA *lang = new IDIOMA();lang-setfile_idioma(path+”/languages.lng”);if (lang-idioma_seleccionado=”Espaol”)splash-setPixmap(QPixmap(“:/images/splash_espagnol.png”);elsesplash-setPixmap(QPixmap(“:/images/splash.png”);splash-show();Qt:Alignment topRight = Qt:AlignRight | Qt:AlignTop;splash-showMessage(lang-leer_idioma(“1),topRight, Qt:white);MainWindow mainWin;mainWin.show();splash-finish(&mainWin);delete splash;return app.exec();=函数如果有返回值必须写,否则有造成一些不确定的错误如:QString a()QString str;str = “abc”;str.append(a();QMessageBox:warning(this, tr(“呼叫”),str,QMessageBox:Ok);上面的情况,对话框可以出来,但点击对话框中的”确定”后,程序会死在那;=进行信号连接时,要确保连接参数中的对象已经创建过,否则会报保护错;图片加载不了,有可能是QT库中的插件库没有拷贝;加载路径指令:QCoreApplication:addLibraryPath(QObject:tr(“%1%2plugins”).arg(QCoreApplication:applicationDirPath().arg(“/”);qDebug() “插件加载的路径是(QCoreApplication:libraryPaths):” QCoreApplication:libraryPaths()endl;有三个插件加载路径 1,应用程序路径;2,QTDIR环境路径,3,加入的路径;=TRACE_LEVEL=5 TRACE_SUBSYS=DB /d/study/umpcapp/umpcapp-dev-1.0.0/debug/gpsapp.exe=void DragWidget:mousePressEvent(QMouseEvent *event)QLabel *child = static_cast(childAt(event-pos();if (!child)return;QPixmap pixmap = *child-pixmap();QByteArray itemData;QDataStream dataStream(&itemData, QIODevice:WriteOnly);dataStream pixmap pos() child-pos();=取得应用程序所在路径,注:结果后面未加”/”QCoreApplication:applicationDirPath()=*.hpp文件,如果改动,Bulid后对改动后代码不起作用,必须ReBulid才可以;=静态成员变更量aa.hclass AAstatic char p13;aa.cppchar AA:p13;如果没在cpp中增加”char AA:p13;”,则编译时会提示”undefined reference to.”的错误=b.h接口中引用a.h接口使用时必须加上include “a.h”include “b.h”否则编译时会出现”如果没在cpp中增加”char AA:p13;”,则编译时会提示”=单例模式singleton单元要最先初始化(#include放到最前面)错误:Singleton is not a template解决方法:#include “singleton.hpp”using namespace Pattern;=QWidget类以模式窗体显示:dailPage = new DailForm(0,tel);dailPage-setWindowModality(Qt:ApplicationModal);dailPage-show();=事件过滤写法:其实可以通过重载QWidget:keyPressEvent()获得本类(假设是窗体)中的几乎所有键盘事件,但焦点在文本框上,就不属于窗体类啦,所以必须采用在窗体类中添加Event Filters:CustomerInfoDialog:CustomerInfoDialog(QWidget *parent): QDialog(parent)firstNameEdit-installEventFilter(this);lastNameEdit-installEventFilter(this);cityEdit-installEventFilter(this);phoneNumberEdit-installEventFilter(this);然后在eventFilter中处理相关键盘事件,通过target判断是否是文本框发生的键盘事件bool CustomerInfoDialog:eventFilter(QObject *target, QEvent *event)if (target = firstNameEdit | target = lastNameEdit| target = cityEdit | target = phoneNumberEdit) if (event-type() = QEvent:KeyPress) QKeyEvent *keyEvent = static_cast(event);if (keyEvent-key() = Qt:Key_Space) focusNextChild();return true;return QDialog:eventFilter(target, event);=去掉窗体标题栏:setWindowFlags(Qt:FramelessWindowHint);=ld.exe cannot find -lSDL处理:环境变量path加入”D:QtDevelopumpcapppublicSDL-1.2.13bin”环境变量path的设置:D:QtDevelopumpcapppublicSTLport-5.1.3bin;D:MinGWbin;D:Qtbin;D:QtDevelopumpcapppublicSDL-1.2.13bin;D:QtDevelopumpcapppublicSDL_mixer-1.2.8bin注:STLport-5.1.3一定要放在MinGW前面,不然会出现“QImage: out of memory, returning null image”的错误;=如果要用到STLport库,那么在配置.pro文件时,一定要记住把stlport放在其它库的前面,下面的写法是正确的:INCLUDEPATH += . ././public/STLport-5.1.3/stlport #这句一定要放在前面././public/SDL-1.2.13/include ././public/common/include ././public/qextserialport-1.1././public/boost-1.37.0/include如果库的依赖关系(*.dll)出错,则应用程序会出现报内存的错误,最简单的方法就是把应用程序所需要的库直接加入环境变量path中,以造成如果库更新,原来拷在应用程序下的库没有及时更新,环境变更path的设置例子:path += D:QtDevelopumpcapppublicboost-1.37.0lib;D:QtDevelopumpcapppublicqextserialport-1.1build上面对应的库为:boost_system-mgw34-mt-1_37.dll;boost_thread-mgw34-mt-1_37.dll;qextserialport.dll=编译成功后,debug下的exe文件不能生成,请检查.pro文件中,HEADERS与SOURCES参数配置是否有错误,比如把.h文件加入SOURCES参数中,把.cpp加入HEADERS参数中.=void MapScene:mouseMoveEvent ( QGraphicsSceneMouseEvent * mouseEvent )QPointF scenepos;scenepos = mouseEvent-scenePos();/qDebug()x()y()page()-settings()-setAttribute(QWebSettings:PluginsEnabled,true);=listWidget-addItem(new QListWidgetItem(QIcon(“:/notepaditem.png”), QFile(filesi).fileName() );=vector 引用的单元:#include using namespace std;=QString 字符串换行:QString str;str = tr(“133);str.append(tr(“”);注:br后要加一个空格;=Qss背景透明:QPushButtonbackground-color: rgba( 255, 255, 255, 0% );=打开指定URL地址QUrl url(““);QDesktopServices:openUrl(url);可以打开任意URL=窗体置前:QWidget w;w.setWindowFlags(Qt:WindowStaysOnTopHint);w.show();=窗体不显示在任务栏:setWindowFlags(Qt:Popup) ;=注:改变*.h的内容,编译时会没有编译过程,只有改变*.cpp才会进行编译;=编译win32 中的 dll工程配置方法(以skypebackend为例):因为工程中的代码全是标准C+的代码,所以编译方式跟QT有点不一样,Project-properties-Project settings页中的”This is a custom Makefile”前面的方框不要勾选;Project-properties-Build targets 右边中的”Type”设置为”Console application”(skypebackend为控制台程序)Project-build options-Linker settings页,设置Link libraries内容为:(win32库文件).MinGWliblibrpcdce4.a.MinGWliblibrpcns4.a.MinGWliblibrpcrt4.a按回车定位到下一焦点:connect(lineEdit1, SIGNAL(returnPressed(), lineEdit2, SLOT(setFocus();项目翻译DEMO:#include #include #include int main( int argc, char *argv )QApplication app( argc, argv );QTranslator translator( 0 );/Creates a QTranslator object without a parenttranslator.load( “ttl_zh-cn”, “.” );/Try to load a file called ttl_zh-cn.qmapp.installTranslator( &translator );/Add the translations from ttl_zh-cn.qm to the pool of translationsQPushButton hello( QPushButton:tr( “Hello world!” ), 0 );app.setMainWidget( &hello );hello.show();return app.exec();1.使用qmake -project生成.pro文件;2.在.pro文件中加上如下语句:TRANSLATIONS = ttl_zh-cn.ts3.运行如下命令:lupdate 生成ttl_zh-cn.ts文件;(PS:.ts的名字来自“翻译源”(translation source)4.运行如下命令:linguist ttl_zh-cn.ts这时候会弹出一个图形界面工具:1)单击左边窗口的QPushButton2)双击中间窗口的helloworld!这时会弹出一个对话框,在Translation下输入:你好世界!3)单击工具栏的Done and Next按钮(这个时候QPushButton的前面会变成绿色的对号)显示翻译完成4)然后File-Release,这个是生成.qm文件(.qm来自“QT消息”Qt message),保存到当前目录下也可以使用命令release ttl_zh-cn.ts来生成.qm文件的。5)点击linguist“X”退出窗口,这个时候会提示保存ttl_zh-cn.ts文件,单击save,完成操作。这一步的目的是把“你好世界!”来替代ttl_zh-cn.ts中的“unfinished”,这个只要了解就可以了,有兴趣的可以去看看QT参考文档。5.运行如下命令:qmake 6.运行如下命令:make7.运行如下命令:./ttl这个时候你会发现按钮是显示的是:“你好世界!” 而不是“helloworld!”PS:lupdate和lrelease命令都可以带参数-verbose,这样会显示一些提示信息。这个 参数是可选的。通过上面的步骤可以完成正常的翻译,但对象QLineEdit的右键菜单显示的还是英文,解决方法:把Qttranslations目录下的qt_zh_CN.ts里面的内容全部拷到自己项目ts文件的后面就可以了(也就是把两个ts文件合并)=4字节空间存INT类型:#define USERGROUP_WIDTH 5;char buff5;int groupid = atoi(groupId.trimmed().toAscii().data(); /得到GroupID的int值char* gid = (char*)(&groupid); /将groupid转化为char*类型memcpy(buff, gid, USERGROUP_WIDTH-1);char p4;memset(buff, 0, USERGROUP_WIDTH);memcpy(buff, p, USERGROUP_WIDTH-1);int gid = *(int*)(&buff);错误信息:redefinition class请核对#ifndef IGPSINTERACTION_H_INCLUDED#define IGPSINTERACTION_H_INCLUDED上面两行中的名称是否一样(出现过第两行中最后一个”D”没掉, 找了N久才查出问题,汗)另一原因是变量定义不可放在.h文件中,如下struct mystruct;是一个变量 (不可放在.h文件中实现)typedef struct MyStruct.mystruct;其中 MyStruct是一种类型,而mystruct是一个变量标准用法在.h文件中typedef struct MyStruct.;在.cpp中定义变量struct MyStruct mystruct;=std:string 转QString:std:string groupName = abcdef;const char *groupNameCh = groupName.c_str();QString tmpStr = QObject:tr(groupNameCh);=窗体在执行destory()时,qapp对象就已经退出啦;=gsoap项目中的错误:multiple definition of namespaces解决方法:用gsoap中的工具生成的 nsmap文件(#include “UMPCServer.nsmap”)引用不能写在.h中,应该要写在.cpp文件中;a.cpp:#include “UMPCServer.nsmap”上面的写法是正确的,不能写在a.h文件中,否则就会报错删除TreeWidget结点:void MainWindow:clearTreeWidget()while ( treeWidget-topLevelItemCount() 0 )QTreeWidgetItem *parentItem = treeWidget-takeTopLevelItem(0);QList list = parentItem-takeChildren ();for (int j = 0; j list.size(); j+)QTreeWidgetItem *childItem = list.at(j);delete &nodeItemData(childItem);delete childItem;delete &nodeItemData(parentItem);delete parentItem;=IGPSNestData* resolveRecord(const QSqlRecord &record,const DataType &dateType )error: expected , or before & token解决方法 #include =GpsSideBar:IGPSNestData* GpsSideBar:resolveRecord(const QSqlRecord &record,const GpsSideBar:DataType &dateType );error: declaration of GpsSideBar:IGPSNestData* GpsSideBar:resolveRecord(const QSqlRecord&, const GpsSideBar:DataType&) outside of class is not definition解决方法:去掉函数头最后的”;”GpsSideBar:IGPSNestData* GpsSideBar:resolveRecord(const QSqlRecord &record,const GpsSideBar:DataType &dateType )=QTreeWidget/QTreeView中的CheckStatus状态的级联更新void GpsSideBar:on_treeWidget_itemChanged ( QTreeWidgetItem * item, int column )if (!item | column != 0)return;Qt:CheckState state = item-checkState(0);QTreeWidgetItem *parent = item-parent();if (parent)int number = 0;int partiallyCheckedNum = 0;for (int row = 0; row childCount(); +row)if (parent-child(row)-checkState(0) = Qt:Checked)+number;if (parent-child(row)-checkState(0) = Qt:PartiallyChecked)+partiallyCheckedNum;if (number = 0)if (parent-checkState(0) != Qt:Unchecked & partiallyCheckedNum = 0)parent-setCheckState(0, Qt:Unchecked);else if (parent-checkState(0) != Qt:PartiallyChecked & partiallyCheckedNum 0)parent-setCheckState(0, Qt:PartiallyChecked);else if (number = parent-childCount()if (parent-checkState(0) != Qt:Checked )parent-setCheckState(0, Qt:Checked);elseif (parent-checkState(0) != Qt:PartiallyChecked )parent-setCheckState(0, Qt:PartiallyChecked);if (item-childCount() 0)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学语文阅读策略教学与课外阅读资源开发研究论文
- 高中物理实验教学中的学生自主探究与创新能力培养论文
- 高中化学概念理解与形成性评价体系构建论文
- 中国医用海藻酸盐伤口敷料行业市场前景预测及投资价值评估分析报告
- 艾梅乙质控管理制度
- 苗圃栽培及管理制度
- 茶籽油生产管理制度
- 触电事故应急救援演练方案
- 课程学习心得(20篇)
- 行政案例分析第七章 行政运行案例分析
- 2024年度海南省国家电网招聘之电网计算机题库练习试卷B卷附答案
- 2025年1月国家开放大学本科《公共政策概论》期末纸质考试试题及答案
- GB/T 16895.3-2024低压电气装置第5-54部分:电气设备的选择和安装接地配置和保护导体
- 2025山西焦煤集团公司招聘高频重点提升(共500题)附带答案详解
- 《民用无人机作业气象条件等级 植保》编制说明
- 手术室绿色通道病人抢救
- 《保密制度培训》课件
- 【MOOC】医学物理学-山东大学 中国大学慕课MOOC答案
- 糖尿病周血管病变
- 《保健食品知识》课件
- 标准隔音施工方案
评论
0/150
提交评论