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 编程**的主要内容,如果未能解决你的问题,请参考以下文章

在 Qt 中的 C++ 中添加 C 函数时的构建问题

QT (C++) 中的简单声音 (.wav) 播放应用程序

Qt C++根据组合框中的选择创建一个对象

如何使用 c && 调用 c++ 函数将应用程序输出重定向到 Qt 中的 textEdit

Qt中的c++继承基础

四则运算图形化