当 QFileDialog::getOpenFileName 的窗口打开时,程序意外完成

Posted

技术标签:

【中文标题】当 QFileDialog::getOpenFileName 的窗口打开时,程序意外完成【英文标题】:when the window of QFileDialog::getOpenFileName opening, the program has unexpected finished 【发布时间】:2013-04-26 15:58:33 【问题描述】:

我正在编写一个简单的 Qt 应用程序来测试多线程(我也完全不熟悉)。我制作了一个 QApplication 来管理 GUI,然后我编写了一个包含 MainWindow 类的 VisionApp 类,它是一个子类的 QMainWindow。

在 MainWindow 类中,我编写了一个函数 void MainWindow::getfromfilevd(),它使用以下方法连接到按钮:

QObject::connect(ui->FileVdButton,SIGNAL(clicked()),this,SLOT(getfromfilevd()));

然后我想使用 QFileDialog::getOpenFileName 从文件中读取图像,我的代码在这里:

void MainWindow::getfromfilevd()

    //mutex.lock();
    from_imgorvd = true;

    QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"),"", tr("Image Files (*.png *.jpg *.bmp *.xpm)"));
    if(fileName.isEmpty()) 
        cv::Mat image;
        image = cv::imread(fileName.toUtf8().constData(), CV_LOAD_IMAGE_COLOR);
        mutex.lock();
        Mat_Img = image.clone();
        mutex.unlock();
    

然而,每次我点击按钮,QFileDialog的窗口打开,但它是空白的,然后我的程序意外完成。

当我使用这段代码时:

void MainWindow::getfromfilevd()


    from_imgorvd = true;

    cv::Mat image;
    image = cv::imread("/home/somnus/Picture/mouse.jpg", CV_LOAD_IMAGE_COLOR);
    if(! image.data) 
        std::cout << "Could not open or find the image" << std::endl ;
    
    else 
        mutex.lock();
        Mat_Img = image.clone();
        mutex.unlock();
    


效果很好。

我真的很想知道我犯了什么错误... 希望得到您的帮助

【问题讨论】:

第一篇文章好!!你在使用 QtCreator 吗?您可以在调试模式下启动并查看崩溃的位置吗?? 你说的是线程。您确定对话框打开代码正在主线程中运行吗?在 Qt 中,所有 GUI 代码都必须在那里运行。另一件要尝试的事情:创建一个简单的测试程序,它只在main() 中打开对话框(记得先创建QApplication 对象)并打印返回的文件名,看看是否可行。 应该是if(!fileName.isEmpty()) ... 哦~谢谢。我终于找到最重要的bug了。我的cpu被我的图像处理用完了,文件打开对话框让cpu饿死了,所以对话框的窗口是空白的。 【参考方案1】:

应该是这样,!fileName.isEmpty()而不是fileName.isEmpty(),因为你需要在文件名不为空的时候加载图片而不是相反。

【讨论】:

以上是关于当 QFileDialog::getOpenFileName 的窗口打开时,程序意外完成的主要内容,如果未能解决你的问题,请参考以下文章

当幸福来敲门英文PPT相关素材

python当密码正确输入,当密码错误时

更新:为啥当用户是管理员时关系有效,但当普通用户时不会?

当位于顶级栏目显示下级栏目,当位于二级栏目显示同级栏目,当位于三级目录,显示上级栏目

当应用程序在后台时扫描外围设备(例如,当屏幕锁定时)

psp一骑当千交叉冲击金手指