数据处理流程
1读取文件函数
//上传时压缩数据 QByteArray UpLoadDialog::compressFile( const QString& path ) { QFile file(path); QByteArray qCompressData; if(file.open(QIODevice::ReadOnly)) { QByteArray data = file.readAll(); qCompressData = qCompress(data, 9); } file.close(); qDebug()<<"qCompressData"<<qCompressData.size(); return qCompressData; }2下载后,,传入保存路径,与下载的二进制文件,解压后保存文件,提示下载文成.
//下载时解压数据 bool UpLoadDialog::uncompressFile( const QString& path, const QByteArray& data ) { if (!path.isEmpty() && !data.isEmpty()) { QByteArray undata = qUncompress(data); if (!undata.isEmpty()) { QFile file(path); if(file.open(QIODevice::WriteOnly)) { file.write(undata); file.close(); QMessageBox::warning(0, "提示", "选择的文件下载完成!"); return true; } return false; } return false; } return false; }3.上传文件要限制文件的描述为MAXLEN个文字以内,QTextEdit
const int MAXLEN = 50; void UpLoadDialog::slotTextChanged() { QString textContent = m_text->toPlainText(); int length = textContent.count(); int maxLength = MAXLEN; if(length > maxLength) { int position = m_text->textCursor().position(); QTextCursor textCursor = m_text->textCursor(); textContent.remove(position - (length - maxLength), length - maxLength); m_text->setText(textContent); textCursor.setPosition(position - (length - maxLength)); m_text->setTextCursor(textCursor); } }4.下载文件保存路径的获取
void UpLoadDialog::slotDownSavePath() { QString saveFileDir = QFileDialog::getExistingDirectory(this, tr("选择保存路径"), "/", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); if (saveFileDir.isEmpty()) { return; } m_lineEditDownSavePath->setText(saveFileDir);//显示在一个QLineEdit上 m_lineEditDownSavePath->setReadOnly(true); }
5.获取一下本机操作者的基本信息,
//操作者基本信息获取
void UpLoadDialog::setHost()
{
//返回主机名字
m_strHostName = QHostInfo::localHostName();
//通过名字创建QHostInfo对象.
QHostInfo info = QHostInfo::fromName(m_strHostName);
//QHostInfo对象下的地址
QList<QHostAddress> addIPs = info.addresses();
int i = 0;
for(; i < addIPs.size(); i++)
{
if(addIPs[i].protocol() == QAbstractSocket::IPv4Protocol)
{
/////////////IP地址
m_strIPv4 = addIPs[i].toString();
break;
}
}
//用户名
m_strUserName = QDesktopServices::storageLocation(QDesktopServices::HomeLocation);
m_strUserName = m_strUserName.section("/", -1, -1);
}
6.上传
//上传 void UpLoadDialog::slotOk() { if (m_Path != NULL) { QString datetime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");//上传时间 QString userName = m_strUserName;//上传用户 if (!m_lineEditUpLoader->text().isEmpty()) { userName = m_lineEditUpLoader->text(); } QByteArray byte = compressFile(m_Path);//压缩文件 if (!byte.isEmpty()) {//和自己的数据库表保存的数据有关,保存什么上传什么东东.我的是用户名,用户IP,文件名,时间,压缩后的二进制文件 ,文件描述 if(m_pMySQLManager->insertData(userName, m_strIPv4, m_filename, datetime, byte, m_text->toPlainText())) { updateData(); //更新数据 m_lineEditPath->clear(); } } } else { QMessageBox::warning(this, "警告", "上传文件不能为空!"); } }7.下载
//下载 void UpLoadDialog::slotDown() { QTreeWidgetItem* currentItem = m_treeWidget->currentItem();//在tree中当前选中的Item if (NULL != currentItem) { QString ID = currentItem->text(0);//选中的Item在数据库中的ID,这个是查询数据的时候要查询,并同时保存,在界面显示的时候隐藏 QString name = currentItem->text(2);//获取文件名 qDebug()<<"ID"<<ID; QString savedir = m_lineEditDownSavePath->text();//获取保存地址 if (savedir.isEmpty()) { QMessageBox::warning(this, "警告", "选择保存文件路径!"); return; } savedir.append("/"); savedir.append(name); qDebug()<<"Savedir"<<savedir; if (!ID.isEmpty() && !savedir.isEmpty()) {//调用m_pMySQLManager的函数,传入一个下载语句,downData()根据ID查询一条数据,保证唯一性. uncompressFile(savedir, m_pMySQLManager->downData(QString("select %1 from %2 where DATA_ID=%3").arg("DATA").arg("data").arg(ID))); m_lineEditDownSavePath->clear(); } } else { QMessageBox::warning(this, "警告", "表格中选择将要下载的文件!"); } }8.在数据库中删除选中文件
//删除 void UpLoadDialog::slotDel() { QTreeWidgetItem* currentItem = m_treeWidget->currentItem();//当前选择的Item if (NULL != currentItem) { QString ID = currentItem->text(0);//唯一ID if (!ID.isEmpty()) {//输入语句 m_pMySQLManager->delData(QString("DELETE FROM DATA WHERE DATA_ID=%1").arg(ID)); qDebug()<<"delData() ID"<<ID; updateData(); //更新表格 } } else { QMessageBox::warning(this, "警告", "表格中选择将删除的文件!"); } }9.更新界面,这个要在每次点击,插入新数据到数据库中,删除,或者是按照时间/上传者/文件名查询的时候更新,界面的表格,