亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

C/C++/Qt與 Python 混合編程(1):c/c++和 Qt 調(diào)用... 、嵌入python文件

系統(tǒng) 1996 0

1 前言

python 是 C 寫的,庫也是 C 寫的,不但 python 可以調(diào)用 C 寫的庫,C也能調(diào)用為 python 寫的庫,甚至調(diào)用 python 語句執(zhí)行。

嵌入為應(yīng)用程序提供了用Python而不是C或c++實(shí)現(xiàn)應(yīng)用程序的某些功能的能力。這可以用于許多目的;

一個例子是允許用戶通過用Python編寫一些腳本來根據(jù)自己的需要定制應(yīng)用程序。

如果一些功能可以更容易地用Python編寫,您也可以自己使用它。

嵌入Python類似于擴(kuò)展它,但并不完全如此。所不同的是,當(dāng)你擴(kuò)展Python應(yīng)用程序的主程序仍然是Python解釋器,

而如果你嵌入Python,主程序可能與Python——相反,應(yīng)用程序的某些部分偶爾會調(diào)用Python解釋器來運(yùn)行一些Python代碼。

2 案例

?

直接給出一個例子,使用 Qt 調(diào)用 python。在 qt 中直接創(chuàng)建 Qt console Application 項(xiàng)目,以下所有內(nèi)容都是終端應(yīng)用程序項(xiàng)目。

            
              #define PY_SSIZE_T_CLEAN
#include 
              
                
#include 
                
                  
#include
                  
                    
using namespace std;
int main(int argc, char *argv[])
{
 QCoreApplication a(argc, argv);
 wchar_t *program = Py_DecodeLocale(argv[0], nullptr);
 if (program == nullptr) {
 fprintf(stderr, "Fatal error: cannot decode argv[0]\n");
 exit(1);
 }
 Py_SetProgramName(program); /* optional but recommended */
 Py_Initialize();
 PyRun_SimpleString ("from time import time,ctime\n"
 "print('今日是:', ctime(time()))\n"
 "print('大家好!')\n"
 );
 if (Py_FinalizeEx() < 0) {
 exit(120);
 }
 PyMem_RawFree(program);
 return a.exec();
}


                  
                
              
            
          

3.解釋

如果你嵌入Python,你就提供了你自己的主程序。這個主程序要做的一件事就是初始化Python解釋器。

1) 至少,您必須調(diào)用函數(shù)Py_Initialize()。有一些可選調(diào)用將命令行參數(shù)傳遞給Python。然后,您可以從應(yīng)用程序的任何部分調(diào)用解釋器。

2) 調(diào)用解釋器有幾種不同的方法:可以將包含Python語句的字符串傳遞給PyRun_SimpleString(),

3) 也可以將stdio文件指針和文件名(僅用于在錯誤消息中標(biāo)識)傳遞給PyRun_SimpleFile()。

4) 您還可以調(diào)用低層操作來構(gòu)造和使用Python對象。

4.運(yùn)行結(jié)果

相當(dāng)于運(yùn)行 python語句

            
              from time import time,ctime

print(”今日是:“, ctime(time())
print('”大家好!")



            
          

C/C++與 Python 混合編程(1):c/c++和 Qt 調(diào)用 、嵌入python文件

?

5 創(chuàng)建說明

Qtz 中要調(diào)用 python 必須明白 python 的 include 和 lib所在的目錄

5.1 查找 python 的目錄

            
              一個命令:python3.7-config --cflags
另外一個命令:python3.7-config --ldflags

            
          

分別顯示 python 的頭文件和庫文件所在,在 pro 文件中定義

            
              # $ python3.7-config --cflags
# -I/anaconda3/include/python3.7m -I/anaconda3/include/python3.7m -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/anaconda3/include -arch x86_64 -I/anaconda3/include -arch x86_64
# $ python3.7-config --ldflags
# -L/anaconda3/lib/python3.7/config-3.7m-darwin -lpython3.7m -ldl -framework CoreFoundation -Wl,-stack_size,1000000 -framework CoreFoundation
INCLUDEPATH += /anaconda3/include/python3.7m
LIBS += -L/anaconda3/lib/python3.7/config-3.7m-darwin -lpython3.7m -ldl
CONFIG += no_keywords
# /anaconda3/include/python3.7m/object.h:450: error: expected member name or ';' after declaration specifiers
# PyType_Slot *slots; /* terminated by slot==0. */
# ~~~~~~~~~~~ ^

            
          

5.2 在 pro 文件中添加

            
              CONFIG += no_keywords

            
          

就是為了避免python 中的 object.h 文件中有 Qt 的保留字 slots,使用配置忽視它。

?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲国产精品日韩一线满 | 国产乱码精品一区二区三区四川 | 高清色视频 | 在线视频久草 | 韩国色三级伦不卡高清在线观看 | 伊人一伊人色综合网 | 欧美一级毛片欧美一级 | 99精品视频免费观看 | 久草久草在线视频 | 天堂在线精品 | 看真人一级毛多毛片 | 91亚洲视频在线观看 | 成人午夜大片免费视频77777 | 国产理论视频 | 激情小视频在线播放免费 | 久久亚洲综合 | 国产做爰免费视频观看 | 67194在线午夜亚洲 | 狠狠色噜噜 | 成人毛片免费免费 | 91天堂97年嫩模在线观看 | 99久久免费国产精品 | 四虎影视1515hh四虎免费 | 欧美一级毛片特黄黄 | 日韩射吧 | 午夜性爽视频男人的天堂在线 | 国产一区二区三区亚洲欧美 | 国产区一区二 | 久久亚洲福利 | 成人毛片全部免费观看 | 国产一区欧美二区 | 9久久这里只有精品国产 | 成人精品综合免费视频 | 白蛇缘起3免费观看 | 毛片色 | 亚洲一二区视频 | 国产99在线 | 亚洲 | 久草热久草视频 | 天堂精品在线 | 九九热精品视频在线播放 | 国产毛片精品 |