亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Qt調用Python詳細圖文過程記錄

 更新時間:2023年05月12日 09:58:07   作者:十年編程老舅  
Qt調用python實際上就是c++調python,網上搜會出來很多,介紹得也比較全,這里做個記錄,下面這篇文章主要給大家介紹了關于Qt調用Python詳細圖文過程,文中通過圖文介紹的非常詳細,需要的朋友可以參考下

1、創(chuàng)建Qt工程

2、添加Python文件

編寫Python代碼,項目結構如下圖示:

3 、添加Python庫

在工程文件中加上Python安裝路徑下的??include???和??libs??路徑:

INCLUDEPATH += C:\Users\Administrator\AppData\Local\Programs\Python\Python37\include
LIBS += -LC:\Users\Administrator\AppData\Local\Programs\Python\Python37\libs -lpython37
//注意:-L 和 PATH 之間不能有空格

注意:此處必須根據自己的安裝情況做修改

4、調用Python模塊

#ifndef
#define
 
#include <QMainWindow>
#include <Python.h>
#include <iostream>
#include <QDebug>
 
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
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    //Python初始化
    Py_Initialize();
    if( !Py_IsInitialized() )
        qDebug()<<"初始化失敗";
 
    //導入sys模塊設置模塊地址
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append('./')");
    //QString setSysPath = QString("sys.path.append('%1')").arg(QCoreApplication::applicationDirPath());
    //PyRun_SimpleString(setSysPath.toStdString().c_str());
 
    //創(chuàng)建模塊指針
    PyObject* pModule = PyImport_ImportModule("Py_Module");
    if (!pModule)
        qDebug()<<"獲取模塊指針失敗";
 
    //創(chuàng)建函數指針
    PyObject* pFunc= PyObject_GetAttrString(pModule,"add");
    if(!pFunc)
        qDebug()<<"獲取函數指針失敗";
 
    //創(chuàng)建函數參數,方法1
    PyObject* pPara = PyTuple_New(2);        // 2個參數
    PyTuple_SetItem(pPara, 0, Py_BuildValue("i",1));  //參數1為int型 1
    PyTuple_SetItem(pPara, 1, Py_BuildValue("i",2));  //參數2為int型 2
    //pPara = Py_BuildValue("(i,i)",1,2); //連寫方式
 
    /*
    PyObject* pPara = PyTuple_New(2);        // 2個參數
    PyTuple_SetItem(pPara, 0, Py_BuildValue("s","Hello"));  //參數1為String型 "Hello"
    PyTuple_SetItem(pPara, 1, Py_BuildValue("s","World!"));  //參數2為String型 "World!"
    */
    
    /// s 將C字符串轉換成Python對象,如果C字符串為空,返回NONE
    /// c 將C類型的char轉換成長度為1的Python字符串對象
    /// i 將一個C類型的int轉換成Python int對象
    /// l 將C類型的long轉換成Pyhon中的int對象
    /// f 將C類型的float轉換成python中的浮點型對象
    /// d 將C類型的double轉換成python中的浮點型對象
 
    //創(chuàng)建函數參數,方法2
    PyObject* args = PyTuple_New(2);        // 2個參數
    PyObject* arg1 = PyLong_FromLong(4);    // 參數一設為4
    PyObject* arg2 = PyLong_FromLong(3);    // 參數二設為3
    PyTuple_SetItem(args, 0, arg1);
    PyTuple_SetItem(args, 1, arg2);
 
    //調用Python函數,傳入元組參數pPara
    PyObject *FuncBack = PyObject_CallObject(pFunc,pPara);
    //PyObject_CallObject(pFunc,nullptr); //無參數調用
 
    //FuncBack是返回值指針,轉換獲取返回值
    int res = 0;
    PyArg_Parse(FuncBack,"i",&res);
    qDebug()<<"返回值: "<<res;
 
    //調用結束,銷毀
    Py_Finalize();
 
}
 
MainWindow::~MainWindow()
{
    delete ui;
}

5、移動文件

編寫完上述代碼之后,直接運行,會得到:

獲取模塊指針失敗

要保證Qt可執(zhí)行文件與Python源文件在同一級目錄下,方可正常運行

所以將工程下的??Py_Module.py???復制到構建目錄下的??debug??文件夾中:

6、運行結果

7、錯誤總結及解決辦法

錯誤1:找不到??Python.h??

出現原因: 因為我們在c++中使用這個了頭文件,因此出現了找不到python.h
解決辦法: 在.pro文件中添加python的頭文件以及靜態(tài)鏈接庫,參考:3 、添加Python庫

錯誤2:

PyType_Slot *slots; object.h(445) : error C2059: 語法錯誤:“;”
object.h(445) : error C2238: 意外的標記位于“;”之前

解決辦法:把slots改成slots1,Python將slots作為變量,而Qt將slots作為關鍵字,所以沖突了,再次編譯該問題就沒有了

錯誤3:

解決辦法:簡單粗暴,直接注釋掉

總結

到此這篇關于Qt調用Python的文章就介紹到這了,更多相關Qt調用Python內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用python實現正則匹配檢索遠端FTP目錄下的文件

    使用python實現正則匹配檢索遠端FTP目錄下的文件

    這篇文章主要介紹了使用python實現正則匹配檢索遠端FTP目錄下的文件的方法,非常的簡單實用,需要的小伙伴參考下
    2015-03-03
  • pytorch中的dataset用法詳解

    pytorch中的dataset用法詳解

    這篇文章主要介紹了pytorch的dataset用法詳解,當我們繼承了一個?Dataset類之后,我們需要重寫?len?方法,該方法提供了dataset的大??;?getitem?方法,?該方法支持從?0?到?len(self)的索引,下面來看看附有代碼的講解吧,希望對你的學習或者工作有所幫助
    2022-01-01
  • Python利用psutil庫進行監(jiān)控進程和資源

    Python利用psutil庫進行監(jiān)控進程和資源

    psutil是Python系統(tǒng)和進程工具庫,它提供了一種跨平臺的方式來獲取系統(tǒng)信息、管理系統(tǒng)進程、監(jiān)控系統(tǒng)性能、操作系統(tǒng)資源等,下面就跟隨小編一起來學習psutil庫的具體應用吧
    2024-01-01
  • Windows和夜神模擬器上抓包程序mitmproxy的安裝使用詳解

    Windows和夜神模擬器上抓包程序mitmproxy的安裝使用詳解

    mitmproxy是一個支持HTTP和HTTPS的抓包程序,有類似Fiddler、Charles的功能,只不過它是一個控制臺的形式操作,這篇文章主要介紹了Windows和夜神模擬器上抓包程序mitmproxy的安裝使用詳解,需要的朋友可以參考下
    2022-10-10
  • python 實現將多條曲線畫在一幅圖上的方法

    python 實現將多條曲線畫在一幅圖上的方法

    今天小編就為大家分享一篇python 實現將多條曲線畫在一幅圖上的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 使用PyInstaller將python轉成可執(zhí)行文件exe筆記

    使用PyInstaller將python轉成可執(zhí)行文件exe筆記

    這篇文章主要介紹了使用PyInstaller將python轉成可執(zhí)行文件exe筆記,需要的朋友可以參考下
    2018-05-05
  • python?類對象的析構釋放代碼演示

    python?類對象的析構釋放代碼演示

    這篇文章主要介紹了python?類對象的析構釋放代碼演示,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-09-09
  • Mac下PyCharm快捷鍵分享

    Mac下PyCharm快捷鍵分享

    這篇文章主要介紹了Mac下PyCharm快捷鍵,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 總結網絡IO模型與select模型的Python實例講解

    總結網絡IO模型與select模型的Python實例講解

    同步、異步、阻塞、非阻塞,當這些網絡IO名詞堆到一起時難免使編程初學者感到困惑,這里我們就來為大家總結網絡IO模型與select模型的Python實例講解:
    2016-06-06
  • python+selenium實現QQ郵箱自動發(fā)送功能

    python+selenium實現QQ郵箱自動發(fā)送功能

    這篇文章主要為大家詳細介紹了python+selenium實現QQ郵箱自動發(fā)送功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評論