本人介绍的是Qt 编程点滴,作为一名新手,我建议必须看一看。编程那些事,只有编程人员自己明白!所以推荐本文。
Qt 编程继续为大家讲解,还是接着文章 Qt 编程点滴 初学者必看 (1),继续介绍,说编程那些细节。由于本话题是一节一节为大家介绍的,所以更多内容请看末尾编辑推荐。
删ITEM方法:
把把ITEM的数据挂到指针上,先删ITEM,然后再删除指针
如果发生 no such file or directory not find(报Qt核心文件错)
有可能是project --properties--projects settings中的"This is a custom MakeFile"没有勾选;
检查.pro文件是 INCLUDEPATH += DEPENDPATH+= 有没加入文件所在的目录
检查.pro文件是否引入两个版本不同的相同文件名的文件;
枚举类型做为信号的参数,则需对枚举类型进行注册
在include中
- //定义Enum
- typedefenum{
- ProgressType,
- StartType,
- SuccessType,
- StopType
- }
- SyncMsgType;//定义结构
- typedefstruct//实际使用中可以多增加些结构成员
- {
- SyncMsgTypemsgtype;
- }SyncMsg;
- Q_DECLARE_METATYPE(SyncMsg)
在应用程序.CPP中
- //连接之前再注册
- qRegisterMetaType("SyncMsg");
- connect(gpssyncthread,SIGNAL(syncMsgNotify(SyncMsg)),
- this,SLOT(syncMsgEvent(SyncMsg)));
- QListlistItemDatas;
- for(QList::iteratorit=listItemDatas.begin();it!=listItemDatas.end();++it)
- {
- (*it)->colName;
- }
- error:multipletypesinonedeclaration
自定义的类 {}后面没有";"
还有一种可能是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重覆
- intmain(intargc,char*argv[])
- {
- Q_INIT_RESOURCE(qtdam);
- QApplicationapp(argc,argv);
- QSplashScreen*splash=newQSplashScreen;
- QStringpath=app.applicationDirPath();
- IDIOMA*lang=newIDIOMA();
- lang->setfile_idioma(path+"/languages.lng");
- if(lang->idioma_seleccionado=="Español")
- splash->setPixmap(QPixmap(":/images/splash_espagnol.png"));
- else
- splash->setPixmap(QPixmap(":/images/splash.png"));
- splash->show();
- Qt::AlignmenttopRight=Qt::AlignRight|Qt::AlignTop;
- splash->showMessage(lang->leer_idioma("1"),topRight,Qt::white);
- MainWindowmainWin;
- mainWin.show();
- splash->finish(&mainWin);
- deletesplash;
- returnapp.exec();
- }
函数如果有返回值必须写,否则有造成一些不确定的错误,如:
- QStringa()
- {
- }
- QStringstr;
- 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()<
有三个插件加载路径 1,应用程序路径;2,QTDIR环境路径,3,加入的路径;
- TRACE_LEVEL=5TRACE_SUBSYS=DB/d/study/umpcapp/umpcapp-dev-1.0.0/debug/gpsapp.exe
- voidDragWidget::mousePressEvent(QMouseEvent*event)
- {
- QLabel*child=static_cast(childAt(event->pos()));
- if(!child)
- return;
- QPixmappixmap=*child->pixmap();
- QByteArrayitemData;
- QDataStreamdataStream(&itemData,QIODevice::WriteOnly);
- dataStream<<pixmap<<QPoint(event->pos()-child->pos());
取得应用程序所在路径,注:结果后面未加"/"
- QCoreApplication::applicationDirPath()
*.hpp文件,如果改动,Bulid后对改动后代码不起作用,必须ReBulid才可以;
小结:通过Qt 编程点滴介绍,也给自己提高了编程过程中需要注意的细节问题,由于本话题是一节一节为大家展现的,所以更多内容,请看编辑推荐。
知优网 » Qt 编程点滴 初学者必看 (2)(qt编程入门)