当前位置:   article > 正文

qt for android存储文本文件到本地_qt andriod 文件读写

qt andriod 文件读写

本博主要分享如何用qt for android 非qml形势存储文本文件到本地

本来以为很麻烦,后来发现和qt在window上使用是一样的,只是用手机存储excel应该要麻烦一些或者不行,但是我是用的是t'xt文件,所以很容易就实现了这个功能。

话不多说上代码

  1. //点击系统自带关闭按钮回调函数
  2. void MainWindow::closeEvent(QCloseEvent *event)
  3. {
  4. if(close_time==0){
  5. QAndroidJniObject javaToast = QAndroidJniObject::fromString("再按一次退出程序");
  6. QAndroidJniObject::callStaticMethod<void>("com/ZtActivity/ZtActivity",
  7. "makeToast",
  8. "(Ljava/lang/String;)V",
  9. javaToast.object<jstring>());
  10. closetimer = new QTimer(this);//创建1s定时器
  11. connect(closetimer, SIGNAL(timeout()), this, SLOT(closetimerout()));//绑定定时函数
  12. closetimer->start(10);
  13. close_time=1;
  14. event->ignore();//失能关闭窗口功能,只能隐藏/显示
  15. }
  16. else{//文本存储
  17. Open_File();
  18. this->close();
  19. }
  20. }

上面代码部分是实现app二次退出才关闭,第一次退出会有toast提示,第二次执行关闭,在关闭前执行一些数据保存,本博主要讲解的就是数据保存这快,至于toast提示什么的请看之前我的博客。

  1. //存储文件
  2. void MainWindow::Open_File()
  3. {
  4. QDateTime qtimeObj = QDateTime::currentDateTime();//获取时间
  5. QString alltext;
  6. //创建UIDdate文件夹
  7. QDir *folder = new QDir;
  8. bool exist = folder->exists("/storage/emulated/0/UIDdate");
  9. if(exist)
  10. {
  11. //QMessageBox::warning(this, tr("createDir"), tr("Dir is already existed!"));
  12. }
  13. else
  14. {
  15. //创建文件夹
  16. bool ok = folder->mkdir("/storage/emulated/0/UIDdate");
  17. if(ok)
  18. QMessageBox::warning(this, tr("CreateDir"), tr("Create Dir success!"));
  19. else
  20. QMessageBox::warning(this, tr("CreateDir"), tr("Create Dir fail"));
  21. }
  22. //存储文件到UIDdate文件夹内
  23. QString fileName;
  24. fileName = tr("/storage/emulated/0/UIDdate/数据文件%1.txt").arg(qtimeObj.toString("yyyyMMddhhmmss"));
  25. QFile file(fileName);
  26. if(!file.open(QIODevice::ReadWrite | QIODevice::Text))
  27. {
  28. QMessageBox::warning(this,tr("错误"),tr("打开文件失败,数据保存失败"));
  29. return;
  30. }
  31. else
  32. {
  33. if(!file.isReadable())
  34. {
  35. QMessageBox::warning(this,tr("错误"),tr("该文件不可读,数据保存失败"));
  36. }
  37. else
  38. {
  39. QTextStream out(&file);
  40. for(int i=0;i<dateline;i++){
  41. alltext+=mostlist[i].part[0]+" "+mostlist[i].part[1]+"\n";
  42. }
  43. out<<alltext<<endl<<QObject::tr("\n date end");
  44. QMessageBox::warning(this,tr("信息"),tr("信息存储成功!\n可在系统根目录文件'UIDdate'文件夹中查看!"));
  45. }
  46. }
  47. file.close();
  48. }

上面就是文件存储的所有代码了,很容易理解吧,就是在手机根目录创建一个文件夹,在文件夹里存储想要存的数据,over!

2019年5月24日22:50:31补充

如果失败,请检查安装程序是否授权读写权限,询问不行,只能设置允许

再程序中添加如下代码,打开程序会询问是否开启权限

  1. bool checkPermission() {
  2. QtAndroid::PermissionResult r = QtAndroid::checkPermission("android.permission.WRITE_EXTERNAL_STORAGE");
  3. if(r == QtAndroid::PermissionResult::Denied) {
  4. QtAndroid::requestPermissionsSync( QStringList() << "android.permission.WRITE_EXTERNAL_STORAGE" );
  5. r = QtAndroid::checkPermission("android.permission.WRITE_EXTERNAL_STORAGE");
  6. if(r == QtAndroid::PermissionResult::Denied) {
  7. return false;
  8. }
  9. }
  10. return true;
  11. }

在main函数中声明调用即可

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/81816
推荐阅读
相关标签
  

闽ICP备14008679号