用Qt在Android上实现文件浏览器

       前阵子想过用Qt写一个符合android手机操作习惯的文件浏览器,今天动手实现了。

       查看网上关于这方面的例子,真是太少了,基本上都是介绍怎么用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做出符合手机操作习惯的

文件浏览器。





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值