qt は外部ライブラリを使用します (例として python/opencv)

役に立った場合は、この謙虚なブロガーに「いいね」、フォロー、ブックマークを残してください (そうではありません) 

(データについてはごまかしました、もしかしたら将来面接は通るかも知れません、ありがとう)

Qt に付属の公式ライブラリ ファイルに加えて、サードパーティのライブラリ ファイルを使用したり、Python やその他の動作を呼び出したりする必要がある場合があります。そのため、外部ライブラリを導入する必要があります。その理由は非常に単純であり、そうではありません。実装するのは難しいですが、注意すべき小さな点がいくつかあります。

この記事で使用した環境は qt 5.12.6 python3.7 64bit opencv 3.4.14 です。 

1: qt チューニング Python スクリプト

qwidgets アプリケーションを作成します。多くを言う必要はありません。作成方法はわかっています。

次のステップは外部ライブラリをインポートすることです

 当然のことながら外部ライブラリを選択し、次にそれに注目します

Python ライブラリは動的ライブラリです。独自の Python ストレージ ディレクトリを見つける必要があります。インポートされるライブラリ ファイルの名前は libpythonXX.a です。

(XX はバージョンで、私の python3.7 は 37 です。) 見つかったら確認します。次のステップはインクルード パスです。ライブラリ ファイルを選択するとインクルード パスが生成されますが、デフォルトのパスが間違っています手動で変更する必要があります。

選択したライブラリ ファイルの上位ディレクトリにインクルード フォルダーがあります。これが正しいパスです。

これが最後の選択です。デバッグ バージョンに追加されたサフィックスを削除します。インストールした Python にはデバッグ バージョンがないようなので、選択しません。選択しても問題ありません。次に、[次へ] をクリックします。をクリックし、「完了」をクリックして追加を完了します。

 追加後、さらに数行のコードが追加されます

これまでのところ、ライブラリは正常に追加されています 

テストを受けてください

Python を使用する必要がある py ヘッダー ファイル (Python.h) を cpp ファイルに導入します。

注: 名前の競合のため、最初に qt の元の定義をキャンセルし、次にヘッダー ファイルをインポートし、最後に qt の元の定義を復元する必要があります。

#测试用的py代码 py_demo.py

def show():
    print("hello!")
//main.cpp


#include "mainwindow.h"
#include<QDebug>
#include <QApplication>

#undef slots
#include <Python.h>
#define slots

int main(int argc, char *argv[])
{
    Py_Initialize();  //初始化python

    if(!Py_IsInitialized())   //如果初始化失败
    {
        qDebug()<<"Python init fail!";
        return -1;
    }
    //加载模块,模块名称为py_demo  (py_demo.py)
    PyObject *pModule = PyImport_ImportModule("py_demo");

    if(!pModule)   //加载失败
    {
        qDebug()<<"load pModule fail!";
        return -1;
    }

    PyObject* show = PyObject_GetAttrString(pModule, "show");   //加载show函数

    if(!show)   //加载函数失败
    {
        qDebug() << "load func show fail";
    }

    //PyEval_CallObject(show,NULL);   //调用函数show  旧式写法

    PyObject_CallFunction(show,nullptr,nullptr);  //新写法

    Py_Finalize();   //退出

    return 0;
}

注: py_demo.py は出力ディレクトリに配置する必要があります (qt は出力ディレクトリの前に最初にコンパイルされます)。

たとえば、私のディレクトリは次のとおりです

py ファイルはここに配置されます (出力ディレクトリのデバッグ内、リリースを使用する場合はリリース内にあります)。

 

 結果:

2: qt は opencv を使用します

最初にプロジェクトを作成します。純粋な C++ で問題ありませんが、方法はありません。

次に、別の問題があります。ダウンロードした opencv のコンパイル済みバージョンは、vs Qt のコンパイル チェーンに適しています。コンパイルには msvc と mingw の 2 種類があります。mingw を使用する場合、opencv のソース コードを手動でコンパイルする必要があります。

ここで必要なものについては、このビデオを参照してください。ステーション b の Jia Zhigang 先生のビデオもこのチュートリアルの環境で使用されましたが、私の QT バージョンが比較的低く、opencv4 のコンパイルに失敗しました。qt5.12 は opencv3 をサポートしていますより高いバージョンを使用する場合は、ビデオを直接視聴できますが、比較的低いバージョンの場合は、ビデオのコンパイルされたソース コード部分のみを視聴できます。

https://www.bilibili.com/video/BV1Za4y1v7ra/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click&vd_source=49f5c9b51a6873d5fc74ea6b061d9259

公式サイトのopencvのダウンロードが少し遅いことを考慮して、ついでにソースコードとコンパイルしたライブラリもアップロードしておきました。

必要なホームページは無料でセルフピックアップ

以下では、mingw を使用してチェーンの下で opencv をコンパイルする方法を紹介します。

これは私がコンパイルしたライブラリです。他のファイルはソース コードと opencv 公式コンパイル ファイルです。デモでは私がコンパイルしたライブラリのみを使用します

最初に環境変数を構成します

パスは mingw_build/install/x64/mingw/bin です。

ファイルは次のようになります

 次に、前と同様にライブラリを追加します

 次に、ダイナミック ライブラリを選択します。ライブラリ ファイルのパスは次のとおりです。

インクルードディレクトリは以下の通り

 デバッグ バージョンのサフィックスに d を追加してチェックを外し、[次へ] をクリックして完了します

テストヘッダーファイルにエラーは報告されていないため、完了する必要があります

おすすめ

転載: blog.csdn.net/ass133755/article/details/127073905