C++ 中的图形应用程序和 C 中的代码 **Qt 编程**
Posted
技术标签:
【中文标题】C++ 中的图形应用程序和 C 中的代码 **Qt 编程**【英文标题】:Graphic app in C++ and code in C **Qt Programming** 【发布时间】:2016-12-21 14:04:47 【问题描述】:我有一个应用程序可以用 c 中的套接字来实现,而且我对 C++ 和 Qt 很满意,是否可以在 Qt 上同时使用 C 和 C++。
代码中有一个示例位于 C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 9600
int main(int argc, char *argv[])
int sock_cnx; /* Socket pour ouverture de connexion */
struct sockaddr_in serveraddr;
struct sockaddr_in clientaddr;
int newfd;
char buf[1024];
int nbytes;
int addrlen;
int i, j;
/* Ensemble des descripteurs qu’on souhaite surveiller en lecture */
fd_set surveil_fds;
/* Ensemble des descripteurs qu’on va utiliser dans SELECT */
fd_set read_fds;
/* Memorise le plus grand descripteur : a utiliser dans SELECT*/
int fdmax;
addrlen = sizeof(clientaddr);
/* Ouverture de la socket du serveur */
if ((sock_cnx = socket(AF_INET,SOCK_DGRAM,0)) == -1)
perror("Erreur socket");
exit(1);
bzero(&serveraddr, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(PORT);
serveraddr.sin_addr.s_addr = htonl (INADDR_ANY);
bzero(&(serveraddr.sin_zero), 8);
/* Bind */
if (bind(sock_cnx, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) == -1)
perror("Erreur Bind");
exit(1);
........
return 0;
我已经为 Qt 上的应用程序创建了界面。
【问题讨论】:
Qt 也有 support for sockets,如果你已经有一个 Qt 应用程序,最好使用它。一个优点是您可以使用信号来处理传入数据。 【参考方案1】:在您的 Qt/C++ 应用程序中,您可以包含您的 C 文件,如下所示:
extern "C"
#include "myCHeaderFile.h
/* extern "C" */
您可以简单地访问 C++/Qt 文件中的 C 函数。
【讨论】:
好的,我会测试它。 完美运行,谢谢。只是现在必须为 windows 使用适当的套接字库。以上是关于C++ 中的图形应用程序和 C 中的代码 **Qt 编程**的主要内容,如果未能解决你的问题,请参考以下文章