【问题标题】:Choose Directory from combobox and list subdirectories in textedits从组合框中选择目录并在 textedits 中列出子目录
【发布时间】:2018-07-11 06:12:50
【问题描述】:

我正在尝试列出目录内的所有子目录(从组合框中选择)。现在我可以在组合框中显示目录列表。我想选择其中一个目录并在 textedit 中列出每个子目录(在这个选定的目录内)。 当我从组合框中选择目录时,我不知道如何列出子目录。这是我当前的代码。

QDir directory = QFileDialog::getExistingDirectory(this, tr("Open  Directory"),"/home", QFileDialog::ShowDirsOnly| QFileDialog::
DontResolveSymlinks);

ui->comboBox->setMinimumWidth(500);
QStringList files = directory.entryList(QDir::Files);
ui->comboBox->addItems(files);

如果有任何帮助,我将不胜感激。谢谢

【问题讨论】:

  • 使用返回所选项目的 currentTextChanged 信号,然后使用 QTextEdit 实现您的逻辑
  • 使用connect(ui->comboBox, &QCombobox::currentTextChanged, ui->textEdit, &QTextEdit::append);
  • 如何列出所选目录中的子目录?我的意思是在“ui->textEdit, &QTextEdit::append)”中如何从组合框中获取目录以列出子目录。你上面提到的信号和槽是正确的。但是我是初学者,能不能给我一些参考资料?
  • 据我所见,QComboBox 有文件名,而不是目录。另一方面,无论它是否是初学者,最好的参考是文档,第二个是 SO,你不认为有人已经想知道如何使用 Qt 获取给定目录的子目录吗?下一个问题与您正在寻找的stackoverflow.com/questions/8052460/… 类似,因此解决方案应该由QDir 类或QDirIterator 类给出,检查那里的一些方法。
  • 我得到了答案。

标签: qt qcombobox


【解决方案1】:

我得到了答案。

void Combo_box::on_pushButton_clicked()
{
    QDir directory = QFileDialog::getExistingDirectory(this, tr("Open Directory"),"/home",
                                                       QFileDialog::ShowDirsOnly| QFileDialog::DontResolveSymlinks);

    ui->comboBox->setMinimumWidth(500);
    for(const QFileInfo & finfo: directory.entryInfoList()){
        ui->comboBox->addItem(finfo.absoluteFilePath());
    }

    connect(ui->comboBox, &QComboBox::currentTextChanged,[this](const QString &selectedDirectory) {
        QDirIterator it(selectedDirectory,QDir::AllEntries | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);

        ui->textEdit->clear();
        while (it.hasNext()){
            ui->textEdit->append(it.next());
        }

    });
}

【讨论】:

  • 在for循环外建立连接
  • 好的。我可以做到。但是我很困惑将连接放在循环内和外循环之间有什么区别?\
  • 连接不会验证信号是否曾经连接到插槽,因此在您的情况下,您将调用 n 次 lambda 函数。
  • 啊啊啊,我是多么愚蠢,这是基本逻辑。谢谢,谢谢。 :)
猜你喜欢
  • 2013-02-19
  • 2012-12-26
  • 1970-01-01
  • 2013-12-04
  • 2019-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多