【问题标题】:Qt folder browser opening more than onceQt文件夹浏览器多次打开
【发布时间】:2015-08-05 18:49:01
【问题描述】:

我有一个 Qt GUI 应用程序,我有一个按钮来浏览输出文件夹。 但是有一个我无法弄清楚的错误。 当您启动应用程序并单击浏览器按钮时,它工作正常,您可以关闭它等。 然后,如果您再次单击该按钮,则会打开一个浏览器窗口,您可以选择该文件夹,但这次当您关闭它时,该窗口会立即再次出现。 如果你重复这个,它会让你关闭它3次,4次等等。

我一直无法理解为什么我目前拥有的代码会发生这种情况。

void Dialog::on_outputFolderBrowseBtn_pressed()
{
    QObject::connect(ui->outputFolderBrowseBtn, SIGNAL(clicked()), this, SLOT(BrowseOutputFolder()));
}

void Dialog::BrowseOutputFolder()
{
    QFileDialog dialog;
    dialog.setFileMode(QFileDialog::Directory);
    dialog.setOption(QFileDialog::ShowDirsOnly);

    QString folderName = QFileDialog::getExistingDirectory(this, tr("Output folder"), "", QFileDialog::ShowDirsOnly);
    if(folderName.size() != 0)
    {
        QDir folder(folderName);
        if(!folder.exists())
        {
            SecureLogger::Instance()->LogError("Folder does not exist ", __FILE__, __LINE__);
        }
        ui->OutputFolderPath->setText(folderName);
    }
}

我已经通过调试器运行了它,它一直跳回到这一行:

QString folderName = QFileDialog::getExistingDirectory(this, tr("Output folder"), "", QFileDialog::ShowDirsOnly);

谁能明白为什么会这样?

编辑:我已经解决了这个问题,但不一定解决了这个问题。 现在我只是在单击按钮时添加了一个布尔标志。所以代码现在看起来像这样:

void Dialog::on_outputFolderBrowseBtn_pressed()
{
    m_clicked = true;
    QObject::connect(ui->outputFolderBrowseBtn, SIGNAL(clicked()), this, SLOT(BrowseOutputFolder()));
}

void Dialog::BrowseOutputFolder()
{
    QString folderName;
    if (m_clicked)
    {
        folderName = QFileDialog::getExistingDirectory(this, tr("Select Folder"), "", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
        m_clicked = false;
    }
    if(!folderName.isEmpty())
    {
        QDir folder(folderName);
        if(!folder.exists())
        {
            SecureLogger::Instance()->LogError("Folder does not exist ", __FILE__, __LINE__);
        }
        ui->OutputFolderPath->setText(folderName);
    }
}

这只是解决问题的方法,并没有告诉我首先出了什么问题,所以任何关于为什么该线路被一遍又一遍地调用的见解将不胜感激。

【问题讨论】:

    标签: c++ qt user-interface qdialog


    【解决方案1】:

    名称on_outputFolderBrowseBtn_pressed 表示this is a slot called when the button is pressed。在其中,您将同一按钮的clicked 信号与您的插槽连接。每次按下按钮时都会创建一个新连接,因此您最终会收到与按下按钮一样多的对BrowseOutputFolder 插槽的调用。

    只需调用您的插槽而不是连接它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-14
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      相关资源
      最近更新 更多