【C++】C++ qt 与 python 简单进程通讯
【C++】C++ qt 与 python 简单进程通讯
前言
准备用 C++写一个简单的文字转语音的小东西,对 C++ qt 这个怎么弄不太清楚(现在看到 qt5.8 后有个叫 QTextToSpeech 的东西),发现 python 调用一些库来进行文字转语音的发声比较简单,准备用 python 来进行接受 C++信息,转成语音。
python 端
python 文字转语音还比较简单,导入 pyttsx3 这个库,然后调用一下就可以了。用的 socket 通讯,python 是作为服务端接受信息。
import socket # 导入 socket 模块
import pyttsx3 as py3
port = '127.0.0.1' #定义ip
ip = 12345 #定义端口
#申请socket服务端对象
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 创建 socket 对象
s.bind((ip, int(port))) # 绑定端口
s.listen(5) # 等待客户端连接
while True:
print("> 服务成功开启,等待连接")
client,addr = s.accept() # 建立客户端连接
data = client.recv(2048) #一次最多接受2048个字节
receive_data = data.decode('gb18030') #接受到的信息转成这个编码,这个编码范围广一些
engine = py3.init()
engine.say(receive_data)
engine.runAndWait()
client.close()
C++端
C++端作为客户端,发送消息给 python。
- 用的 VS2013 环境,其中要把 qt 的 web socket 模块加上。
- 在调用的地方加上 #include <QtNetwork/QtNetwork> 这是一个全局的,qtcpsocket 在里面。
- 可能需要在配置,链接器,输入中添加 Qt5Networkd. lib 这个库。
这么用的
头文件里面添加了个 QTcpSocket *m_tcpClient;
指针。
QString english_word = mWordList[index].mWord;//得到英语文本信息;
std::string res = english_word.toLocal8Bit().toStdString();//转成string类型;
char *buff = const_cast<char *>(res.c_str());//转成char类型发送;
m_tcpClient->close();//关闭之前在主程序初始化时写了m_tcpClient = new QTcpSocket(this);生成的一个m_tcpClient;这段代码就可以多次调用了;
delete(m_tcpClient);//释放指针空间;
m_tcpClient = new QTcpSocket(this);//新建对象;
m_tcpClient->connectToHost(QHostAddress("127.0.0.1"), 12345);//建立链接;
m_tcpClient->write(buff);//发送信号
C++端接受数据
接受数据填上一句这 m_tcpClient->waitForReadyRead();
就可以了,下面是接收的代码
m_tcpClient->waitForReadyRead();
QByteArray data = m_tcpClient->readAll(); // 读取缓冲区数据
QString received_data = QString::fromUtf8(data.data(), data.size());
注意在这么用的时候,需要在. h 文件里面先创建一个 QTcpSocket *m_tcpClient
指针,在构造函数里面先生请下空间,然后在后面才可以直接 close -- m_tcpClient->close();
OK。