Qt :: QFileDialog第二次调用时会崩溃我的应用程序

时间:2017-09-28 15:44:20

标签: c++ qt qt-creator qfiledialog

我是Qt和OpenCV的新手,正在创建一个集成两者的项目。我遇到的问题是我有一个加载文件的按钮,它使用QFileDialog。整个过程顺利运行,我的文件被加载。但是,如果我再次单击加载按钮,它会崩溃。似乎问题发生在调用QFileDialog :: getOpenFileName时,但我需要专家意见。

这是按钮点击的功能。

void MainWindow::on_pushButton_clicked()
{
    QFileDialog dialog(this);
    dialog.setNameFilter(tr("Images (*.png *.xpm *.jpg)"));
    dialog.setViewMode(QFileDialog::Detail);
//    dialog.setAttribute(Qt::WA_DeleteOnClose);
//    dialog.DontUseNativeDialog;

    filename = QFileDialog::getOpenFileName(this, tr("Open File"),
                                                "/home",
                                                tr("Images (*.png *.xpm *.jpg)"));
    imageObject = new QImage();
    imageObject->load(filename);
    image = QPixmap::fromImage(*imageObject);
    scene = new QGraphicsScene(this);
    scene->addPixmap(image);
    scene->setSceneRect(image.rect());

    ui->graphicsView->setScene(scene);
    ui->graphicsView->fitInView(scene->sceneRect(),Qt::KeepAspectRatio);

    cvHandler = new OpenCVHandler(filename.toStdString());
}

我已经尝试了两个被注释掉的行。我的搜索也没有发现我能够轻易理解的内容:

Crash when calling getOpenFileName from QItemDelegate's custom editor

QFileDialog opens a second (possibly parent) unwanted window

Qt File Dialog Rendered Incorrectly and Crashes

如果完全相关,我使用的是Ubuntu 16.04 LTS系统。

谢谢

1 个答案:

答案 0 :(得分:2)

问题出在评论栏中。我没有正确使用dialog.DontUseNativeDialog。在getOpenFileName函数中使用它可以解决问题:

filename = QFileDialog::getOpenFileName(this, tr("Open File"),
                                                "/home",
                                                tr("Images (*.png *.xpm *.jpg)"),0,QFileDialog::DontUseNativeDialog);

谢谢大家。