📄 evaqtutil.cpp
字号:
Q_UINT32 fontColor = qunIter->getChatFontColor(); stream << fontSize << fontColor; // save message type Q_UINT8 msgType = qunIter->getMessageType(); stream<<msgType; Q_UINT32 nameVersion = qunIter->getRealNamesVersion(); stream<< nameVersion; // save my qun card name = qunIter->getCardName(); Q_UINT8 gender = qunIter->getCardGender(); std::string phone = qunIter->getCardPhone(); std::string email = qunIter->getCardEmail(); std::string memo = qunIter->getCardMemo(); stream<<name.c_str()<<gender<<phone.c_str()<<email.c_str()<<memo.c_str(); // save all members memberList = qunIter->getMembers(); Q_UINT16 size = memberList.size(); stream<<size; for(memberIter=memberList.begin(); memberIter!=memberList.end(); ++memberIter){ Q_UINT32 qqNum = memberIter->getQQ(); Q_UINT16 face = memberIter->getFace(); Q_UINT8 age = memberIter->getAge(); Q_UINT8 gender = memberIter->getGender(); std::string nick = memberIter->getNick(); Q_UINT8 extFlag = memberIter->getExtFlag(); Q_UINT8 commonFlag = memberIter->getCommonFlag(); Q_UINT16 qunGroupIndex = memberIter->getQunGroupIndex(); Q_UINT16 qunAdminValue = memberIter->getQunAdminValue(); // added by henry std::string realName = memberIter->getQunRealName(); stream<<qqNum<<face<<age<<gender<<nick.c_str()<<extFlag<<commonFlag<<qunGroupIndex<<qunAdminValue<<realName.c_str(); } } file->flush(); file->close();}void EvaHelper::setLoadQunListArgs( QFile * file ){ this->file = file;}void EvaHelper::doQunUserLoading( ){ if(type != LoadQunUsers) return; if(!file->isOpen()) return; QDataStream stream(file); ///FIXME we should do version checking/saving in a seperate method, which /// could benifit buddy list save/load as well, I am just too lazy :) // check version first char *flag = new char[3]; stream.readRawBytes(flag, 3); Q_UINT32 version = 0; stream>>version; if(!(flag[0]=='E' && flag[1]=='V' && flag[2]=='A' && version == profileVersion)){ file->close(); file->remove(); delete flag; return; } delete flag; QunList list; Q_UINT32 qunID; Q_UINT32 extID; Q_UINT8 type; Q_UINT32 creator; Q_UINT8 authType; Q_UINT16 unknown1; Q_UINT16 category; Q_UINT32 versionID; std::string name; Q_UINT16 unknown2; std::string description; std::string notice; Q_UINT32 realNamesVersion; Q_UINT32 fontSize; Q_UINT32 fontColor; Q_UINT8 cardGender; Q_UINT8 msgType; char *str = new char[1024]; memset(str, 0, 1024); while(!stream.atEnd()){ // load qun basic info stream>>qunID>>extID>>type>>creator>>authType>>unknown1>>category>>versionID>>str; name = str; stream>>unknown2>>str; description = str; stream>>str; notice = str; QunInfo info; info.setQunID(qunID); info.setExtID(extID); info.setType(type); info.setCreator(creator); info.setAuthType(authType); info.setUnknown1(unknown1); info.setCategory(category); info.setVersionID(versionID); info.setName(name); info.setUnknown2(unknown2); info.setDescription(description); info.setNotice(notice); Qun qun(info.getQunID()); qun.setDetails(info); stream >> fontSize >> fontColor; qun.setChatFontSize(fontSize); qun.setChatFontColor(fontColor); // load message type stream>>msgType; qun.setMessageType((Qun::MessageType)msgType); stream >> realNamesVersion; qun.setRealNamesVersion(realNamesVersion); // load my card for this qun stream>>str; qun.setCardName(str); stream>>cardGender; qun.setCardGender(cardGender); stream>>str; qun.setCardPhone(str); stream>>str; qun.setCardEmail(str); stream>>str; qun.setCardMemo(str); // load all members details std::list<FriendItem> members; Q_UINT16 size; stream >> size; for(int i=0; i< size; i++){ Q_UINT32 qqNum; Q_UINT16 face; Q_UINT8 age; Q_UINT8 gender; std::string nick; Q_UINT8 extFlag; Q_UINT8 commonFlag; Q_UINT16 qunGroupIndex; Q_UINT16 qunAdminValue; std::string realName; // added by henry stream>>qqNum>>face>>age>>gender>>str; nick = str; stream>>extFlag>>commonFlag>>qunGroupIndex>>qunAdminValue>>str; realName = str; FriendItem item; item.setQQ(qqNum); item.setFace(face); item.setAge(age); item.setGender(gender); item.setNick(nick); item.setExtFlag(extFlag); item.setCommonFlag(commonFlag); item.setQunGroupIndex(qunGroupIndex); item.setQunAdminValue(qunAdminValue); item.setQunRealName( realName); // henry members.push_back(item); } qun.setMembers(members); list.add(qun); } delete str; file->close(); EvaQunListEvent *event = new EvaQunListEvent(); event->setQunList(list); QApplication::postEvent(receiver, event);}const QString EvaHelper::generateCustomSmiley( const QString & source, const QString &destDir, const bool withThumbnail){ QString fileName = source; QString imageName = fileName.right(fileName.length() - fileName.findRev("/") -1); QString destExt = imageName.right(imageName.length() - (imageName.findRev(".")+1)); if(destExt == "png" || destExt == "PNG"){ QPixmap srcImage; if(!srcImage.load(fileName)){ printf("EvaHelper: cannot load png image\n"); return ""; } if(!srcImage.save(destDir + "/" + imageName, "JPEG", 50)){ printf("EvaHelper: convert to JPG format failed\n"); return ""; } fileName = destDir + "/" + imageName; } char *md5 = new char[16]; if(!getFileMD5(fileName, md5)){ delete md5; return ""; } QString strMD5 = md5ToString(md5); if(destExt == "png" || destExt == "PNG"){ destExt = "JPG"; if(!rename(fileName, destDir + "/" + strMD5 +"." + destExt)){ delete md5; return ""; } }else{ if(!copyFile(fileName, destDir + "/" + strMD5 +"." + destExt)){ delete md5; return ""; } } delete md5; if(withThumbnail){ QImage srcpix; if(!srcpix.load(fileName)){ printf("EvaHelper: cannot load image\n"); return ""; } QImage thumbpix = srcpix.smoothScale(20, 20); QString destname = destDir + "/" + strMD5 + "fixed.bmp"; if(!thumbpix.save(destname, "BMP")){ printf("EvaHelper: convert to thumbnail BMP format failed\n"); return ""; } } return strMD5 +"." + destExt;}const bool EvaHelper::getFileMD5( const QString & fileName, char *md5){ if(!md5) return false; QFileInfo info(fileName); if(!info.exists()) return false; unsigned int len = info.size(); char *buf = new char[len]; QFile file(fileName); if(!file.open(IO_ReadOnly)){ printf("EvaHelper:image dose not exists!"); delete buf; return false; } unsigned int numRead = file.readBlock(buf, len); file.close(); if(numRead!=len){ delete buf; return false; } memcpy(md5, EvaUtil::doMd5(buf, len), 16); delete buf; return true;}const QString EvaHelper::md5ToString(const char *md5){ if(!md5) return ""; QString strMd5; for(int i=0; i<16; i++){ QString tmp = QString::number((unsigned char)(md5[i]), 16); if(tmp.length()==1) tmp = "0" + tmp; strMd5+=tmp.upper(); } return strMd5;}const bool EvaHelper::copyFile( const QString & source, const QString & dest ){ QFileInfo info(source); if(!info.exists()) return false; unsigned int len = info.size(); char *buf = new char[len]; QFile file(source); if(!file.open(IO_ReadOnly)){ printf("EvaHelper:image dose not exists!"); delete buf; return false; } unsigned int numRead = file.readBlock(buf, len); file.close(); if(numRead!=len){ delete buf; return false; } QFile destFile(dest); if(!destFile.exists()){ if(!destFile.open(IO_WriteOnly | IO_Raw)){ printf("EvaHelper:cannot copy image file!\n"); delete buf; return false; } if(destFile.writeBlock(buf, len) != (int)len){ destFile.close(); destFile.remove(); printf("EvaHelper:bytes copied wrong!\n"); delete buf; return false; }else destFile.close(); } return true;}const bool EvaHelper::rename( const QString & source, const QString & dest ){ QDir destFile(source); if(!destFile.exists(source)){ printf("EvaHelper: rename file failed\n"); return false; } destFile.rename(source, dest); destFile.remove(source); return true;}/**=================================================================================================*/QRgb EvaQtUtils::toGray(QRgb rgb){ int gray = (212671 * qRed (rgb) + 715160 * qGreen (rgb) + 72169 * qBlue (rgb)) / 1000000; return qRgba (gray, gray, gray, qAlpha (rgb));}QPixmap EvaQtUtils::convertToGrayscale(const QPixmap &pm){ QImage image = QImage(); if (!pm.isNull ()) image = pm.convertToImage (); convertToGrayscale (&image); QPixmap destPixmap; destPixmap.convertFromImage(image, Qt::ColorOnly/*always display depth*/ | Qt::DiffuseDither/*hi quality dither*/ | Qt::ThresholdAlphaDither/*no dither alpha*/ | Qt::PreferDither/*(dither even if <256 colours)*/); return destPixmap;}void EvaQtUtils::convertToGrayscale (QImage *destImagePtr){ if (destImagePtr->depth () > 8) { for (int y = 0; y < destImagePtr->height (); y++) { for (int x = 0; x < destImagePtr->width (); x++) { destImagePtr->setPixel (x, y, toGray (destImagePtr->pixel (x, y))); } } } else { // 1- & 8- bit images use a color table for (int i = 0; i < destImagePtr->numColors (); i++) destImagePtr->setColor (i, toGray (destImagePtr->color (i))); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -