本博主要分享如何用qt for android 非qml形势存储文本文件到本地
本来以为很麻烦,后来发现和qt在window上使用是一样的,只是用手机存储excel应该要麻烦一些或者不行,但是我是用的是t'xt文件,所以很容易就实现了这个功能。
话不多说上代码
//点击系统自带关闭按钮回调函数
void MainWindow::closeEvent(QCloseEvent *event)
{
if(close_time==0){
QAndroidJniObject javaToast = QAndroidJniObject::fromString("再按一次退出程序");
QAndroidJniObject::callStaticMethod("com/ZtActivity/ZtActivity",
"makeToast",
"(Ljava/lang/String;)V",
javaToast.object());
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
alltext+=mostlist[i].part[0]+" "+mostlist[i].part[1]+"\n";
}
out<
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函数中声明调用即可