赞
踩
本博主要分享如何用qt for android 非qml形势存储文本文件到本地
本来以为很麻烦,后来发现和qt在window上使用是一样的,只是用手机存储excel应该要麻烦一些或者不行,但是我是用的是t'xt文件,所以很容易就实现了这个功能。
话不多说上代码
- //点击系统自带关闭按钮回调函数
- void MainWindow::closeEvent(QCloseEvent *event)
- {
- if(close_time==0){
- QAndroidJniObject javaToast = QAndroidJniObject::fromString("再按一次退出程序");
- QAndroidJniObject::callStaticMethod<void>("com/ZtActivity/ZtActivity",
- "makeToast",
- "(Ljava/lang/String;)V",
- javaToast.object<jstring>());
- closetimer = new QTimer(this);//创建1s定时器
- connect(closetimer, SIGNAL(timeout()), this, SLOT(closetimerout()));//绑定定时函数
- closetimer->start(10);
- close_time=1;
- event->ignore();//失能关闭窗口功能,只能隐藏/显示
- }
- else{//文本存储
- Open_File();
- this->close();
- }
- }
上面代码部分是实现app二次退出才关闭,第一次退出会有toast提示,第二次执行关闭,在关闭前执行一些数据保存,本博主要讲解的就是数据保存这快,至于toast提示什么的请看之前我的博客。
- //存储文件
- void MainWindow::Open_File()
- {
- QDateTime qtimeObj = QDateTime::currentDateTime();//获取时间
- QString alltext;
- //创建UIDdate文件夹
- QDir *folder = new QDir;
- bool exist = folder->exists("/storage/emulated/0/UIDdate");
- if(exist)
- {
- //QMessageBox::warning(this, tr("createDir"), tr("Dir is already existed!"));
- }
- else
- {
- //创建文件夹
- bool ok = folder->mkdir("/storage/emulated/0/UIDdate");
- if(ok)
- QMessageBox::warning(this, tr("CreateDir"), tr("Create Dir success!"));
- else
- QMessageBox::warning(this, tr("CreateDir"), tr("Create Dir fail"));
- }
- //存储文件到UIDdate文件夹内
- QString fileName;
- fileName = tr("/storage/emulated/0/UIDdate/数据文件%1.txt").arg(qtimeObj.toString("yyyyMMddhhmmss"));
-
- QFile file(fileName);
- if(!file.open(QIODevice::ReadWrite | QIODevice::Text))
- {
- QMessageBox::warning(this,tr("错误"),tr("打开文件失败,数据保存失败"));
- return;
- }
- else
- {
- if(!file.isReadable())
- {
- QMessageBox::warning(this,tr("错误"),tr("该文件不可读,数据保存失败"));
- }
- else
- {
- QTextStream out(&file);
- for(int i=0;i<dateline;i++){
- alltext+=mostlist[i].part[0]+" "+mostlist[i].part[1]+"\n";
- }
- out<<alltext<<endl<<QObject::tr("\n date end");
- QMessageBox::warning(this,tr("信息"),tr("信息存储成功!\n可在系统根目录文件'UIDdate'文件夹中查看!"));
- }
- }
- file.close();
- }
上面就是文件存储的所有代码了,很容易理解吧,就是在手机根目录创建一个文件夹,在文件夹里存储想要存的数据,over!
2019年5月24日22:50:31补充
如果失败,请检查安装程序是否授权读写权限,询问不行,只能设置允许
再程序中添加如下代码,打开程序会询问是否开启权限
- bool checkPermission() {
- QtAndroid::PermissionResult r = QtAndroid::checkPermission("android.permission.WRITE_EXTERNAL_STORAGE");
- if(r == QtAndroid::PermissionResult::Denied) {
- QtAndroid::requestPermissionsSync( QStringList() << "android.permission.WRITE_EXTERNAL_STORAGE" );
- r = QtAndroid::checkPermission("android.permission.WRITE_EXTERNAL_STORAGE");
- if(r == QtAndroid::PermissionResult::Denied) {
- return false;
- }
- }
- return true;
- }
在main函数中声明调用即可
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。