目录
1.配置AndroidManifest.xml文件
先选择好release构建目录,我的构建目录为D:\work\code\QTProject\sbox\release
什么都不做先直接realse运行(以得到原生的AndroidManifest.xml文件)
运行成功之后在构建目录里有一个android-build目录,进入该目录
复制AndroidManifest.xml文件
在自己的项目目录里新建一个android目录,把复制的AndroidManifest.xml文件放到这个目录里
在.pro文件里增加语句:
QT += core gui androidextras
DISTFILES += android/AndroidManifest.xml
这个路径是你复制的AndroidManifest.xml所放置的路径,不能是release构建目录里的AndroidManifest.xml,因为每次构建都会重载,重载之后就不是你所修改保存的AndroidManifest.xml了
添加语句之后,AndroidManifest.xml就可以在项目里看到了,双击打开AndroidManifest.xml
在最下面的下拉选项框中找到我标红的这几个,依次点击”Add“,保存
2.代码
#include <QFileDialog>
#include <QFileInfo>
#include <QStandardPaths>
#include <QTextCodec>
#include <QTextStream>
....
void Widget::checkAndRequestPermission() {//设置访问外部存储的权限
auto result = QtAndroid::checkPermission("android.permission.READ_EXTERNAL_STORAGE");
if (result == QtAndroid::PermissionResult::Denied) {
QtAndroid::requestPermissionsSync(QStringList() << "android.permission.READ_EXTERNAL_STORAGE");
result = QtAndroid::checkPermission("android.permission.READ_EXTERNAL_STORAGE");
if (result == QtAndroid::PermissionResult::Denied) {
qDebug() << "Permission denied";
return;
}
}
}
bool Widget::openTextByIODevice(const QString &aFileName)//打开文件
{
//用IODevice方式打开文本文件
QFile aFile(aFileName);
if (!aFile.exists()) //文件不存在
{
qDebug() << "文件不存在" ;
QMessageBox::warning(this, "错误", "文件不存在");
return false;
}
if (!aFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
qDebug() << "文件打开失败" ;
QMessageBox::warning(this, "错误", "文件打开失败");
return false;
}
QTextStream in(&aFile);
// 设置编码
const QString encoding = "GBK";
in.setCodec(QTextCodec::codecForName(encoding.toUtf8()));
QString text = in.readAll();
qDebug() << "text:" << text;
aFile.close();
return true;
}
void Widget::on_openFileBtn_clicked()//上传文件
{
checkAndRequestPermission();
QFileDialog dialog(this);
dialog.setWindowTitle("选择文件");
dialog.setFileMode(QFileDialog::AnyFile); // 设置文件模式为任意文件
dialog.setViewMode(QFileDialog::Detail); // 设置视图模式为详细模式
if (dialog.exec() == QDialog::Accepted) {
QStringList fileNames = dialog.selectedFiles();
if (!fileNames.isEmpty()) {
QString fileName = fileNames.first();
openTextByIODevice(fileName);
}
}
}
...