【问题标题】:How to manipulate multiple Folders/Dir in QT?如何在 QT 中操作多个文件夹/目录?
【发布时间】:2015-06-18 14:29:12
【问题描述】:

我想知道在获得视频文件之前如何操作目录。 首先主目录是"F:/TestingVideos/" 在测试视频中有文件,例如:1。现金办公室 ,2.Rosville Gate ,3.我的视频 每个视频都包含其他文件夹,例如 Cash Office 有一个目录 "F:/TestingVideos/Cash Office/" 里面我们有文件夹,例如我们有以下 "F:/TestingVideos/Cash Office/20141201/" 在日期文件夹里面我有我想播放的视频。

到目前为止,我已经实现了一个方法:

void Dialog::on_loadedButton_clicked(){
  QString videoname = "F:/TestingVideos/";`
  ui->DirectoryLineEdit->setText(videoName);
  QDir dir(videoName);

QFileInfoList files = dir.entryInfoList();

QStringList MonTypeFolder = dir.entryList(QDir::NoDotAndDotDot | QDir::AllDirs, QDir::DirsFirst);
ui->MonitoringcomboBox->addItems( MonTypeFolder);
ui->MonitoringcomboBox->show();
foreach(QFileInfo file, files){
    if(file.isDir()){
        //qDebug() << "DIR: " << file.fileName();

        // qDebug() << "Directory path file:" << file.absoluteFilePath();
        QString filePathString = file.absoluteFilePath();
        QFileInfo info = QFileInfo(filePathString);

       qDebug() << "Folders" << " are writable: " << info.isWritable() << "are readable: " << info.isReadable();

    }
    if(file.isFile()){
          qDebug() << "FILE: " << file.fileName();
    }

}

我的输出对于我的QFileInfo info; 来说是可写和可读的,我也做了一个qDebug()&lt;&lt; info.absoluteFilePath() 我得到了以下结果: "F:/TestingVideos" "F:/" "F:/TestingVideos/Cash Office" "F:/TestingVideos/Rosville" "F:/TestingVideos/My Videos"

我想要一种方法来操作基本名称,即 Cash Office、Rosville 等... 20141201 在另一个组合框中,因为当前 ui.monitoringcomboBox->show() 可以显示基本名称。我希望能够基本上将文件夹操作到可以使用 QUrl 播放视频的级别。

【问题讨论】:

  • 所以如果我理解正确的话,你有一个名为 testing videos 的根文件夹。在该文件夹中,您还有其他文件夹,例如现金办公室等。在这些文件夹中,您有日期文件夹,然后在这些日期文件夹中,您有视频。是对的吗?这种结构总是一样的吗(3级文件夹,视频总是在底部文件夹中)?
  • @Cits 是的,这是正确的,现在我想显示日期文件夹,如果我在我的第一个组合框 {ui->MonitoringcomboBox->show();} 上选择例如 Cash Office,日期文件夹例如 20141201 必须出现在第二个组合框 {ui->datecombobox->show} 上。之后,我希望能够为这些视频创建像 QUrl 一样的内容

标签: c++ qt qmediaplayer qdir qfileinfo


【解决方案1】:

如果我理解正确,你想要这样的东西:

我的代码有点粗糙,但你可以用它作为起点:

-MainWindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include <QComboBox>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

    QComboBox *mainCB_;
    QComboBox *baseCB_;
    QComboBox *datesCB_;
    QComboBox *mediaCB_;

    QString path_;

    QStringList media_;

    void createComboBoxes();

private slots:
    void onBaseComboBoxActivated(QString folderText);

    void onDatesComboBoxActivated(QString folderText);

    void onMediaComboBoxActivated(QString folderText);
};

#endif // MAINWINDOW_H

-MainWindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDir>
#include <QDebug>

#define CBWidth 140

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    media_()
{
    ui->setupUi(this);
    setFixedSize(840, 400);

    path_ = "/Users/its/Desktop/Testing Videos";  //insert your root folder path here
    media_ << "*.3gp" << "*.avi" << "*.m4v" << "*.mov" << "*.mp4" << "*.mpeg" << "*.mpg" << "*.3g2" << "*.mxf" << "*.swf" << "*.m2v" << "*.wmv" << "*.flv" << "*.mkv";

    QDir dir(path_);
    if(dir.exists())
    {
        createComboBoxes();
    }
    else
    {
        qDebug() << "Error: Main dir " << path_ << " doesn't exist.";
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::createComboBoxes()
{
    mainCB_ = new QComboBox(this);
    mainCB_->addItem(path_.section('/', -1));
    mainCB_->setFixedWidth(CBWidth);
    mainCB_->move(50, 50);

    baseCB_ = new QComboBox(this);
    baseCB_->setFixedWidth(CBWidth);
    baseCB_->move(250, 50);

    datesCB_ = new QComboBox(this);
    datesCB_->setFixedWidth(CBWidth);
    datesCB_->move(450, 50);

    mediaCB_ = new QComboBox(this);
    mediaCB_->setFixedWidth(CBWidth);
    mediaCB_->move(650, 50);

    QDir mainFolderDir(path_);
    QStringList mainFolderContent = mainFolderDir.entryList(QDir::NoDotAndDotDot | QDir::AllDirs, QDir::DirsFirst);
    baseCB_->addItems(mainFolderContent);
    connect(baseCB_, SIGNAL(activated(QString)), this, SLOT(onBaseComboBoxActivated(QString)));
    onBaseComboBoxActivated(baseCB_->itemText(0));
    connect(datesCB_, SIGNAL(activated(QString)), this, SLOT(onDatesComboBoxActivated(QString)));
    connect(mediaCB_, SIGNAL(activated(QString)), this, SLOT(onMediaComboBoxActivated(QString)));
}

void MainWindow::onBaseComboBoxActivated(QString folderText)
{
    QDir baseFolderDir(path_ + "/" + folderText);
    if(baseFolderDir.exists())
    {
        QStringList baseFolderContent = baseFolderDir.entryList(QDir::NoDotAndDotDot | QDir::AllDirs, QDir::DirsFirst);
        datesCB_->clear();
        datesCB_->addItems(baseFolderContent);
        onDatesComboBoxActivated(datesCB_->itemText(0));
    }
    else
    {
        qDebug() << "Error: Base dir " << path_ + "/" + folderText << " doesn't exist.";
    }
}

void MainWindow::onDatesComboBoxActivated(QString datesText)
{
    QDir datesFolderDir(path_ + "/" + baseCB_->currentText() + "/" + datesText);
    if(datesFolderDir.exists())
    {
        QStringList datesFolderContent = datesFolderDir.entryList(media_, QDir::Files, QDir::Name);
        mediaCB_->clear();
        mediaCB_->addItems(datesFolderContent);
        onMediaComboBoxActivated(mediaCB_->itemText(0));
    }
    else
    {
        qDebug() << "Error: Dates dir " << path_ + "/" + baseCB_->currentText() + "/" + datesText << " doesn't exist.";
    }
}

void MainWindow::onMediaComboBoxActivated(QString mediaText)
{
    qDebug() << "Media selected with URL:" << path_ + "/" + baseCB_->currentText() + "/" + datesCB_->currentText() + "/" + mediaText;
}

希望对你有帮助。

【讨论】:

  • @Citis。非常感谢你,这就是我要找的哇,如果我的声誉更高,我会给你打分。如果我可以问,我怎样才能将我的技能提升到和你一样好?
  • @Citis,再次感谢你的助手,这是你给我的一个很好的起点。它完美地工作并完成了所需的工作。
  • @BillalMabuza 很高兴它对您有所帮助。好吧,变得更好的唯一秘诀就是多练习。如果您是初学者,您应该在 youtube(有一些不错的频道)或学习页面中查看一些学习 qt 视频。也请检查此线程:stackoverflow.com/questions/5510811/qt-learning-resources 哦,即使您没有足够的代表来投票,您仍然可以单击 ✓ 按钮将我的答案标记为有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 2020-11-18
  • 2019-09-10
  • 2020-10-21
  • 2012-05-22
相关资源
最近更新 更多