
消息传递
郁病-颜色表
2023年3月18日发(作者:五好是哪五好)QT进程通讯--通过消息进⾏传递
QT是通过nativeEvent()函数来捕获window系统发送过来的消息,所以要重写这个消息。
⽽MFC是通过重写OnCopyData来捕获消息
在发送和接收⽅都添加
头⽂件添加:
发送⽅:
接收⽅
#pragmaexecution_character_set("utf-8")
1#include
2#pragmacomment(lib,"")
1HWNDhWnd=NULL;
2QStringstr("服务端");
3hWnd=::FindWindowW(NULL,(LPCWSTR)16());//找窗⼝名称,窗⼝名称中⽂英⽂均可
4inta=0;
5if(::IsWindow(hWnd))
6{
7COPYDATASTRUCTcd;
8
9QStringstr=QStringLiteral("newdata1245");
=100;
=();
=8().data();
13::SendMessageW(hWnd,WM_COPYDATA,0,reinterpret_cast(&cd));
14
15}
问题:关键是:中⽂乱码
两个客户端都设置了
但在接收显⽰时,中⽂⼀直乱码。。。。各位⼤神求⽀招。。。
1
2boolWidget::nativeEvent(constQByteArray&eventType,void*message,long*result)
3{
4
5MSG*param=static_cast(message);
6
7switch(param->message)
8{
9caseWM_COPYDATA:
10{
11COPYDATASTRUCT*cds=reinterpret_cast(param->lParam);
12//QString*cds=reinterpret_cast(param->lParam);
13
14
15
16if(cds->dwData==100)
17{
18charbuf[100]={0};
19memcpy(buf,cds->lpData,cds->cbData);
20//QStringstrMessage=buf;
21QStringstrMessage=QString::fromUtf8(reinterpret_cast(cds->lpData),cds->cbData);
22QStringstrMessage2=(char*)(cds->lpData);
23
24qDebug()<<"len="<<()<<()< 25QStringstr1=QString::fromUtf8("提⽰"); 26qDebug()<<"message1="<<(strMessage)< 27 28qDebug()<<"message17="<<8()< 29QMessageBox::warning(this,str1,strMessage); 30 31qDebug()<<"message3="< 32*result=1; 33returntrue; 34} 35} 36} 37 38returnQWidget::nativeEvent(eventType,message,result); 39} #pragmaexecution_character_set("utf-8")