gpt4 book ai didi

c++ - QDir 提供了正确的文件,但显示的数量不正确

转载 作者:行者123 更新时间:2023-11-30 05:33:48 26 4
gpt4 key购买 nike

在我的 Qt 程序中,我基本上是选择一个文件夹,查看内容,然后获取索引列表(0、1、2、3、......)。它显示了正确的文件(左),但转换的文件超出了预期。这是错误和代码的图片:

enter image description here

主窗口.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

主窗口.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();
}

最佳答案

看起来目录中有三个非文件。您只对文件感兴趣,但是 QDir::count引用状态:

Returns the total number of directories and files in the directory

Equivalent to entryList().count().

注意参数是默认的,这就是 count 返回更多的原因。 before 包含文件列表,那么为什么不使用它的count/size/length呢?

int amount = before.size();

关于c++ - QDir 提供了正确的文件,但显示的数量不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34561310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com