以编程方式填写并提交QFileDialog

时间:2016-08-18 17:46:27

标签: qt qfiledialog

为了好玩,我正在编写一个GUI测试库。这是了解Qt如何运作并获得一些实际结果的好方法。

到目前为止,我尝试在调试时填写我在工作中所做的所有手动任务,其中一个是选择一些文件进行处理。我想以编程方式选择这些文件。

我创建了这样的对话框:

void MainWindow::fileDialog()
{
    QString ddd = QFileDialog::getExistingDirectory(this, "Select file or die!");
    qDebug()<<"Selected file: "<<ddd;
}

当我选择一个文件时,我选择的目录为QString。我创建此代码以选择programmaticaly文件。代码通过循环遍历Qt应用程序中的所有小部件来获取QFileDialog

// Assume private QFileDialog* targetFileDialog_;
void FileDialogResult::setValue(const QVariant& var)
{
    if( var.canConvert<QString>() ) {
        targetFileDialog_->setDirectory(var.toString());
        // These two were added later, when it didn't work
        // but they didn't help in any way
        targetFileDialog_->selectFile(var.toString());
        QUrl asUrl(var.toString());
        targetFileDialog_->selectUrl(asUrl);

        QString directory = targetFileDialog_->directory().absolutePath();
        qDebug()<<"New dir: "<<directory;
        // Copied from QFileDialog::getExistingDirectory to check the real output
        qDebug()<<"Selected: "<<targetFileDialog_->selectedUrls().value(0).toString();
    }
}

当我请求选择路径时,它会更新对话框,路径将显示在底部的字段中。它看起来像这样:

image description

但是当我以编程方式提交对话框时,通过以下代码完成:

void DialogResult::submit()
{
    targetDialog_->done(QDialog::Accepted);
}

然后打印出来:

Selected file:  ""

FileDialogResult::setValue打印两个不同的值:

New dir:  "C:/Qt"
Selected:  "file:///C:/MYSELF/programing/build-QtGuiTest-Qt_5_6_0_mingw49_32-Debug"

当我以编程方式选择路径但手动提交时,可以。因此问题可能在于我提交对话框的方式,而不是设置路径。

如果您想运行完整代码,请执行git@github.com:Darker/qt-gui-test.gitgo to GitHub(与此问题相关的提交为40b3e9f)。

0 个答案:

没有答案