① qt中c++調用python是含類的模塊導入怎麼處理呢
#include <QCoreApplication>
#include
<Python.h>
#include
<iostream>
using
namespace
std;
int
main(
int
argc,
char
argv[]) { QCoreApplication a(argc, argv);
//
初始化python模塊
Py_Initialize();
if
( !
Py_IsInitialized() ) {
return
; }
//
導入test.py模塊
PyObject* pMole = PyImport_ImportMole(
test
);
if
(!
pMole) { printf(
Cant open python file!\n
);
return
; }
//
獲取test模塊中的hello函數
PyObject* pFunhello= PyObject_GetAttrString(pMole,
hello
);
//
注釋掉的這部分是另一種獲得test模塊中的hello函數的方法
//
PyObject* pDict = PyMole_GetDict(pMole);
//
if (!pDict) {
//
printf("Cant find dictionary.\n");
//
return -1;
//
//
PyObject* pFunhello = PyDict_GetItemString(pDict, "hello");
if
(!
pFunhello){ cout
<<
Get function hello failed
<<
endl;
return
; }
//
調用hello函數
PyObject_CallFunction(pFunhello,NULL);
//
結束,釋放python
Py_Finalize();
return
a.exec(); }
② QT中調用Python
如果你是嵌入的話,應該沒問題。python的庫會暴露c api的,你的qt程序照著python文檔中的embedded章節就好。 看樣子,你的是linux下的,不過一般頭文件就是include/python.h,怎麼會是include/python2.7呢?你寫錯了吧。庫文件應該是在lib下面。
③ Python 使用Qt 報錯:No mole named 'PySide2'
Qt 生成Python的項目後,運行報錯 No mole named 'PySide2'
這個時候配唯需要安裝對應的模塊,旁虛執行命令
打開命令行,進入生成項目的根目錄,運賣燃運行文件,這里要注意如果是 pip 安裝的,對應的是系統自帶的 python 命令,一般是python2.+ 的版本。 如果是pip3 安裝, 對應的 python3 命令,如果使用錯命令,依然會報錯
④ ubuntu下在Qt4.8中添加python2.7庫出了問題該怎麼改
做一個很久沒人維護的項目的二次開發,在往項目中添加python庫的時候皮純提示有問燃鄭咐題,問題如下:
:-1: error: /home/luoyi/Sgems/SGeMS/GsTLAppli/main/../../../../../../usr/local/lib//libpython2.7.a(dynload_shlib.o): undefined reference to symbol 'dlsym@@GLIBC_2.2.5'
/usr/叢宏lib/x86_64-linux-gnu/libdl.so:-1: error: error adding symbols: DSO missing from command line
:-1: error: collect2: error: ld returned 1 exit status
請問有沒有大神遇到過的,求教啊...進度條卡到99%的感覺太郁悶了
感覺是鏈接庫缺失,少GCC環境?
⑤ python使用pyqt時導入錯誤!!
方法一
from PyQt4 import *
app = PyQt4.QtGui.QApplication(sys.argv)
⑥ linux下用qt需要用到python在Py_Initialize就報錯
你在鏈接的時候必須提供正確的鏈接參數 (需要把 libpython 鏈接到你的可執行程序才能正確找到python C API)
具體可以用
pythonX.Y-config--cflags
得到編譯參數。
用
pythonX.Y-config--ldflags
得到鏈接參數
比如在我的系統上python2.7得到的參數是
$python2.7-config--cflags
-I/usr/include/python2.7-I/usr/include/python2.7-fno-strict-aliasing-march=x86-64-mtune=generic-O2-pipe-fstack-protector-strong--param=ssp-buffer-size=4-DNDEBUG-march=x86-64-mtune=generic-O2-pipe-fstack-protector-strong--param=ssp-buffer-size=4
$python2.7-config--ldflags
-lpython2.7-lpthread-ldl-lutil-lm-Xlinker-export-dynami
那麼就在編譯和鏈接的時候分別加入上面列出的參數,就可以了 (注意,不要加我例子中列印出來的內容,要加你自己執行pythonX.Y-config 後得到的內容)。
⑦ Qt下無法調用python,打不開文件為什麼
#include<QCoreApplication>
//包含調用Python相應的頭文件
#include<Python.h>
intmain(intargc,char*argv[])
{
QCoreApplicationa(argc,argv);
//初始化Python解釋器,這是調用操作的第一步
Py_Initialize();
if(!Py_IsInitialized()){
return-1;
}
//執行單句Python語句,用於給出調用模塊的路徑,梁旅否則將無法找到相應的調用模塊
PyRun_SimpleString("importsys");
PyRun_SimpleString("sys.path.append('./'碧兄)");
//獲取qt_python_fun.py模塊的指針
PyObject*pMole=PyImport_ImportMole("qt_python_fun");
if(!pMole){
printf("Can'topenpythonfile ");
return-1;
}
//獲取hello函數的指針
PyObject*pFunhello=PyObject_GetAttrString(pMole,"hello");
if(!pFunhello){
printf("Getfunctionhellofailed ");
return-1;
}
//調用函數,傳入參數為NULL
PyObject_CallFunction(pFunhello,NULL);
//銷毀Python解釋器,這是調用的最後一步
Py_Finalize();
returna.exec();
}
作者:sleepyjoker
鏈接:http://www.jianshu.com/p/cfe44f56bb90
來源:簡書
著作悔渣襲權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
⑧ 用C++/Qt 寫Python調試器遇到的問題
在C++中,「類函數指針」和傳統的「函數指針」,是兩個完全不同的東西。
你取一個類的成員函數的地址,得到的是一個類函數指針,也叫成員函數指針。即使你的成員函數定義看起來和普通函數原型完全一樣,它也和這個原型的普通函數指針完全不同,彼此之間不能轉換。
PyEval_SetTrace要求傳入的是一個傳統的函數指針,你傳入一個類函數指針,當然是不行的。編譯器報錯是說無法將一個類函數指針轉換為函數指針。
C++的類函數指針,是一個非常難用的東西,有非常多奇怪的特性,而且不同編譯器對它的支持大不相同,是C++著名的復雜性來源之一,建議不要使用。
你想要的東西,實際上是一個「委託」的概念,不過可惜的是C++並不支持委託。使用boost::function可以實現類似功能,但python的C API介面卻不支持boost::function,所以也不行。
你這種情況,最簡單的方法還是用傳統的函數指針,使用普通函數包裝下類的成員函數,然後把普通函數的指針傳給python。