c++qtqdir

QDir is giving correct files, but shows inncorrect amount


In my Qt program, I basically choose a folder, view the contents, and then get the indexed list (0, 1, 2, 3, ........). It shows the correct files (left), but converts more than wanted. Here is and image of the error and code:

enter image description here

MainWindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QFileDialog>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    void check();
    void verify();
    void update();
    void makeList();

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

private slots:
    void on_toolButton_clicked();

    void on_pushButton_clicked();

    void on_checkBoxDateOrdered_clicked()
    {
        check();
    }

    void on_checkBoxInverted_clicked()
    {
        check();
    }

    void on_lineEdit_textChanged(const QString &arg1);

    void on_pushButtonClear_clicked();

    void on_listWidget_currentTextChanged()
    {
        update();
    }

    void on_listWidget_2_currentTextChanged()
    {
        update();
    }

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

MainWindow.cpp:

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

QString path;
QStringList before;
QString suffix;
QDir folder;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->checkBoxDateOrdered->setEnabled(false);
    ui->checkBoxInverted->setEnabled(false);
    ui->pushButton->setEnabled(false);
    ui->pushButtonClear->setEnabled(false);
}

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

void MainWindow::check()
{
    ui->listWidget->clear();
    if (ui->checkBoxDateOrdered->isChecked() && !ui->checkBoxInverted->isChecked())
    {
        before = folder.entryList(QDir::Files, QDir::Time);
    }
    else if (ui->checkBoxInverted->isChecked() && !ui->checkBoxDateOrdered->isChecked())
    {
        before = folder.entryList(QDir::Files, QDir::Reversed);
    }
    else if (ui->checkBoxInverted->isChecked() && ui->checkBoxDateOrdered->isChecked())
    {
        before = folder.entryList(QDir::Files, QDir::Time | QDir::Reversed);
    }
    else
    {
        before = folder.entryList(QDir::Files);
    }
    ui->listWidget->addItems(before);
}

void MainWindow::verify()
{
    if (ui->listWidget->count() == 0 && ui->listWidget_2->count() > 0)
    {
        ui->listWidget_2->clear();
    }
    else if (ui->listWidget->count() > 0 && ui->listWidget_2->count() == 0)
    {
        ui->listWidget->clear();
    }
    else if (ui->listWidget->count() > 0 && ui->listWidget->count() > 0)
    {
        ui->listWidget->clear();
        ui->listWidget_2->clear();
    }
}

void MainWindow::update()
{
    if (ui->listWidget->count() == 0 && ui->listWidget_2->count() > 0)
    {
        ui->pushButtonClear->setEnabled(true);
    }
    else if (ui->listWidget->count() > 0 && ui->listWidget_2->count() == 0)
    {
        ui->pushButtonClear->setEnabled(true);
    }
    else if (ui->listWidget->count() > 0 && ui->listWidget->count() > 0)
    {
        ui->pushButtonClear->setEnabled(true);
    }
    else
    {
        ui->pushButtonClear->setEnabled(false);
    }
}

void MainWindow::makeList()
{
    ui->listWidget->clear();
    ui->listWidget_2->clear();

    ui->lineEdit->setText(path);
    folder.setPath(path);
    check();
    QString temp = before.at(0);
    QStringList pieces = temp.split(".");
    suffix = pieces.value(pieces.length() - 1);

    int amount = folder.count();
    QStringList after;

    for (int x = 0; x < amount; x++)
    {
        after << QString::number(x) + "." + suffix;
    }

    ui->listWidget_2->addItems(after);
}

void MainWindow::on_toolButton_clicked()
{
    path = QFileDialog::getExistingDirectory(this, tr("Open Directory"), "/home", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
    if (path != "")
    {
        makeList();
    }
}

void MainWindow::on_pushButton_clicked()
{
    for (int x = 0; x < before.count(); x++)
    {
        int i = x;
        folder.rename(before.at(x), QString::number(i++) + "." + suffix);
    }
}

void MainWindow::on_lineEdit_textChanged(const QString &arg1)
{
    if (arg1 == "")
    {
        ui->checkBoxDateOrdered->setEnabled(false);
        ui->checkBoxInverted->setEnabled(false);
        ui->pushButton->setEnabled(false);
        ui->pushButtonClear->setEnabled(false);
    }
    else if (arg1 != "")
    {
        ui->checkBoxDateOrdered->setEnabled(true);
        ui->checkBoxInverted->setEnabled(true);
        ui->pushButton->setEnabled(true);
        ui->pushButtonClear->setEnabled(true);
    }
}

void MainWindow::on_pushButtonClear_clicked()
{
    ui->lineEdit->clear();
    verify();
}

Main.cpp:

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

Solution

  • It looks like there are three non-files in the directory. You're interested only in files, but QDir::count reference states:

    Returns the total number of directories and files in the directory

    Equivalent to entryList().count().

    Notice the arguments are defaulted, that's why count returns more. before contains the list of the files, so why not use its count/size/length?

    int amount = before.size();