4

我正在编写一个简单的 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();
    }

}

它运作良好。

我真的很想知道我犯了哪个错误......希望得到你的帮助

4

1 回答 1

2

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

于 2013-04-27T07:29:25.983 回答