用Qt在Android上实现文件浏览器
2014-09-22 21:08
811 查看
前阵子想过用Qt写一个符合android手机操作习惯的文件浏览器,今天动手实现了。
查看网上关于这方面的例子,真是太少了,基本上都是介绍怎么用java来实现的。不过既然java能实现,那么c++肯定也能够实现。
Eclipse里面用的是ListView这个控件,刚好Qt有个QListView控件,名字相近,所以就选择使用它了。下面这个图是我设计的文件浏览器界面,设定成横版的了。
下面是代码部分:
ui->setupUi(this);
下面是实现效果图:
有待改进的地方是,不应该有打开按钮,这样似乎不合适,应该可以在QListView的doubleClicked(QModeIndex)槽函数内实现这些。另外,常见的
安卓应用的文件浏览器,ListView的每个Item都有分割线,那样看起来更加的美观,以后有机会要尝试解决这两个问题,用Qt做出符合手机操作习惯的
文件浏览器。
查看网上关于这方面的例子,真是太少了,基本上都是介绍怎么用java来实现的。不过既然java能实现,那么c++肯定也能够实现。
Eclipse里面用的是ListView这个控件,刚好Qt有个QListView控件,名字相近,所以就选择使用它了。下面这个图是我设计的文件浏览器界面,设定成横版的了。
下面是代码部分:
DirectoryViewer.h
#ifndef DirectoryViewer_H
#define DirectoryViewer_H
#include <QDialog>
#include <QFileSystemModel>
namespace Ui {
class DirectoryViewer;
}
class DirectoryViewer : public QDialog
{
Q_OBJECT
public:
explicit DirectoryViewer(QWidget *parent = 0);
~DirectoryViewer();
public slots:
void btn_Choose_Clicked();
void btn_Return_Clicked();
void btn_Open_Clicked();
void Item_DoubleClicked(QModelIndex index);
public:
QString m_ChoosePath;
private:
Ui::DirectoryViewer *ui;
QFileSystemModel *model;
QString m_nCurrentPath;
QDir root_Dir;
QDir current_Dir;
QModelIndex index;
};
#endif // DirectoryViewer_H
DirectoryViewer.cpp
#include "DirectoryViewer.h"
#include "ui_DirectoryViewer.h"
#include <QDesktopWidget>
DirectoryViewer::DirectoryViewer(QWidget *parent) :
QDialog(parent),
ui(new Ui::DirectoryViewer)
{
ui->setupUi(this);
QDesktopWidget * deskTop = QApplication::desktop();
move( (deskTop->width()-this->width())/2,(deskTop->height()-this->height())/2);
model = new QFileSystemModel(this);
model->setFilter(QDir::AllEntries|QDir::NoDotAndDotDot);
root_Dir = QDir::rootPath();
m_nCurrentPath = root_Dir.absolutePath();
ui->listView->setModel(model);
ui->listView->setRootIndex(model->setRootPath(m_nCurrentPath));
ui->listView->show();
ui->lineEdit->setText(m_nCurrentPath);
QObject::connect(ui->btn_Ruturn,SIGNAL(clicked()),this,SLOT(btn_Return_Clicked()));
QObject::connect(ui->btn_Open,SIGNAL(clicked()),this,SLOT(btn_Open_Clicked()));
QObject::connect(ui->btn_Choose,SIGNAL(clicked()),this,SLOT(btn_Choose_Clicked()));
QObject::connect(ui->listView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(Item_DoubleClicked(QModelIndex)));
}
DirectoryViewer::~DirectoryViewer()
{
delete ui;
}
void DirectoryViewer::btn_Return_Clicked()
{
if(m_nCurrentPath.length()!= 0)
{
current_Dir = QDir(m_nCurrentPath);
current_Dir.cdUp();
m_nCurrentPath = current_Dir.absolutePath();
ui->listView->setRootIndex(model->setRootPath(m_nCurrentPath));
ui->listView->show();
ui->lineEdit->setText(m_nCurrentPath);
}
}
void DirectoryViewer::btn_Open_Clicked()
{
index = ui->listView->currentIndex();
if(m_nCurrentPath == "/")
{
m_nCurrentPath = "";
}
m_nCurrentPath = m_nCurrentPath + "/"+ index.data().toString();
ui->listView->setRootIndex(model->setRootPath(m_nCurrentPath));
ui->listView->show();
ui->lineEdit->setText(m_nCurrentPath);
}
void DirectoryViewer::btn_Choose_Clicked()
{
index = ui->listView->currentIndex();
if(m_nCurrentPath == "/")
{
m_nCurrentPath = "";
}
m_nCurrentPath = m_nCurrentPath + "/"+ index.data().toString();
m_ChoosePath = m_nCurrentPath;
this->close();
}
下面是实现效果图:
有待改进的地方是,不应该有打开按钮,这样似乎不合适,应该可以在QListView的doubleClicked(QModeIndex)槽函数内实现这些。另外,常见的
安卓应用的文件浏览器,ListView的每个Item都有分割线,那样看起来更加的美观,以后有机会要尝试解决这两个问题,用Qt做出符合手机操作习惯的
文件浏览器。
相关文章推荐
- android 实现粗糙的文件浏览器
- 使用QT实现DREAM:Building on Linux for Android
- 用Qt树型控件做文件浏览器的简单实现
- QT5 for android 实现横屏锁定
- Qt 5.9 for Android 实现沉浸式状态栏
- 【Qt】Qt 导出 PDF,Android和Qt截图功能实现
- Qt on android 播放视频的实现
- 实现QT android自启动
- qt实现文件浏览器
- qt android开发篇之如何实现在不同分辨率手机中自适应字体大小,或者像素什么的
- Qt 自制文件浏览器并实现按照扩展名过滤
- QT for Android HelloWorld实现
- Qt:文件浏览器添加右击菜单实现重命名
- Qt for Android QML实现缩放、拖拽、长按效果简单示例
- qt for android实现程序的开机自启动。
- Android编写文件浏览器简单实现
- Android实现远程控制PC(Android[客户端]+Qt[服务器端])
- android 文件浏览器实现
- Qt for Android中ListView上拉加载的实现
- QT5 for android 实现横屏锁定