c++ - Qt::QFileDialog 在第二次调用时使我的应用程序崩溃

标签 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 系统。

谢谢

最佳答案

问题出在注释行中。我没有正确使用 dialog.DontUseNativeDialog。在 getOpenFileName 函数中使用它可以达到目的:

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

谢谢大家

关于c++ - Qt::QFileDialog 在第二次调用时使我的应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46473310/

相关文章:

qt - 如何在 Qt 连接中声明仿函数参数?

qt - qt 中的 setSectionResizeMode 有什么问题?

c++ - 我可以在 Qt-Creator 中看到程序输出吗?

android - Qt:在 Android 和 iOS 上设置应用程序图标

c++ - QT 中原始位图转 png

c++ - 如何在一个地方注释 #ifdef 下的值

c++ - vector 的实现如何在不出现对象初始化问题的情况下工作?

c++ - 如何将响应式 Qt GUI 与基于 OpenMP 的计算库相结合?

c++ - 如何暂停这个opengl程序?

c++ - 是什么导致 IWICBitmapFrameEncode::SetPixelFormat 返回与请求格式不同的格式?