【问题标题】:The program has unexpectedly finished in QT opencv程序在 QT opencv 中意外完成
【发布时间】:2021-06-14 00:33:00
【问题描述】:

我知道这已经发布了很多次,但是我无法从以前的帖子中找到解决方案。我从 wiki Qt 学习了如何在 Windows 上设置 Qt 和 openCV 的教程。

我的.pro 文件和mainwindows.cpp 如下所示。我想按照示例打开图像。这里有什么问题?检查了 opencv 版本,它与包含的库相同。 PATH 也是正确的。 cpp文件

#include "ui_mainwindow.h"

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    cv::Mat image = cv::imread("C://1.jpg", 1);
    cv::namedWindow("My Image");
    cv::imshow("My Image", image);
}

MainWindow::~MainWindow()
{
    delete ui;
}

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = opencvtest
TEMPLATE = app

DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h
FORMS    += mainwindow.ui

INCLUDEPATH += C:\opencv\build\include
LIBS += C:\opencv-build\bin\libopencv_core451.dll
LIBS += C:\opencv-build\bin\libopencv_highgui451.dll
LIBS += C:\opencv-build\bin\libopencv_imgcodecs451.dll
LIBS += C:\opencv-build\bin\libopencv_imgproc451.dll
LIBS += C:\opencv-build\bin\libopencv_features2d451.dll
LIBS += C:\opencv-build\bin\libopencv_calib3d451.dll
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

【问题讨论】:

  • 显示你的标题;类的声明几乎不是一个微不足道/可省略的细节......!另外,您是否尝试过使用调试器来确定故障位置并检查那里的变量?
  • 按您的要求显示标题

标签: c++ qt opencv


【解决方案1】:

当程序在 Qt Creator 下崩溃,并且您有额外的库时,很可能的原因是运行时 PATH 中缺少额外的库。

在这种情况下,您需要将 C:\opencv-build\bin 添加到 PATH 中。至少有 3 种方法可以解决。

  1. 编辑系统环境,使相关目录始终在系统PATH。您需要重新启动 Qt Creator 才能使此更改生效。这不是推荐的方式,除非您真的希望这些东西也用于其他目的。

  2. 您可以在 Qt Creator 项目视图下编辑项目的构建环境。每种构建类型都有单独的配置,因此您可能需要分别对它们执行此操作,这有好有坏。这很好,因为这样您就可以为不同的构建使用不同的目录(例如 debug vs relase,MSVC vs MinGW builds)。这很糟糕,因为这很麻烦,而且更容易出错。

  3. 您可以在 Qt Creator 项目视图中将其添加到运行环境中。然后它将对所有构建类型都相同。

在这种情况下,3 可能是要走的路。


烦人的Qt Creator 没有显示任何关于缺少哪个DLL 的信息,它只是说程序崩溃了。这可以通过从 Windows 开始菜单中为正确的工具链字符串“Qt 命令提示符”来解决(搜索 Qt,你应该找到它)。然后转到构建的.exe 目录并运行.exe。您现在应该看到一个错误对话框,其中 Windows 会告诉您它未能找到哪个 DLL。然后您可以查看该 DLL 的位置并将其添加到路径并重试,直到程序启动。在您知道使用此方法的目录后,您可以按照上面的说明将它们添加到 Qt Creator。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多