QDir дает правильные файлы, но показывает неверное количество

В моей программе Qt я в основном выбираю папку, просматриваю содержимое, а затем получаю проиндексированный список (0, 1, 2, 3, ........). Он показывает правильные файлы (слева), но конвертирует больше, чем хотел. Вот и изображение ошибки и кода:

введите здесь описание изображения

Главное окно.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
#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();
}
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();
}

Основной.cpp:

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

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

    return a.exec();
}

person Nicholas Johnson    schedule 01.01.2016    source источник


Ответы (1)


Похоже, в каталоге есть три не-файла. Вас интересуют только файлы, но в ссылке QDir::count указано:

Возвращает общее количество каталогов и файлов в каталоге

Эквивалентно entryList().count().

Обратите внимание, что аргументы установлены по умолчанию, поэтому count возвращает больше. before содержит список файлов, так почему бы не использовать его count/size/length?

int amount = before.size();
person LogicStuff    schedule 02.01.2016
comment
Привет, это не сработало. Я выбрал папку с 65 файлами, и она показала 2.... Я изменил строку 96 на int amount = folder.Size; - person Nicholas Johnson; 02.01.2016
comment
Это сработало! Хотя я должен был просто изменить «.count» на «.size», но я изменил его, и это сработало. Благодарю вас! - person Nicholas Johnson; 02.01.2016