初学Qt之--在Qt中调用外部C语言模块

本文介绍如何从Qt应用程序中调用预先编译好的C语言程序,并传递参数及接收输出。通过具体代码示例展示了Qt与C语言程序交互的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      调用外部已编译好的C语言模块,传递参数并将结果返回打印出来。

       C语言模块代码:

    

/**********Test.c**********/
/**********用gcc编译后生产那个的可执行文件test放在..../invokec/C/目录下**********/

#include <stdio.h>

int main(int argc,char *argv[])
{
   printf("Hello,I am a C program!\n");
   printf("now,I am invoked by a program called Qt!\nfollowing are the parameters that Qt sends to me:\n");
   printf("%s\n",argv[0]);
   printf("%s\n",argv[1]);
   printf("%s\n",argv[2]);
   return 0;
}

  Qt代码:

 

/********MyTest.h***********/

#ifndef MYTEST_H_
#define MYTEST_H_

#include <QtGui/QWidget>
#include <QtGui/QPushButton>

class MyTest : public QWidget
{
  Q_OBJECT
  public:
  MyTest();
  ~MyTest();
  public slots:
  void invokeC();
  private:
  QPushButton *pb;
};

#endif

/********MyTest.cpp**********/

#include "MyTest.h"
#include <QtCore/QProcess>
#include <iostream>
#include <QtCore/QTextStream>
#include <QtCore/QIODevice>

MyTest::MyTest()
:QWidget()
{
  this->setGeometry(0,0,200,50);
  pb=new QPushButton("点击调用C程序",this);
  pb->setGeometry(0,0,200,50);
  connect(pb,SIGNAL(clicked()),this,SLOT(invokeC()));
}

MyTest::~MyTest()
{
}

void MyTest::invokeC()
{
   QProcess *process=new QProcess();
   QStringList str;
   str.clear();
   str << "a" << "b" ;
   process->start("../C/test",str); 
   process->waitForStarted();
   process->waitForFinished();
   QByteArray qb=process->readAll();
   QString str22(qb);
   QTextStream cout(stdout);
   cout<<str22<<endl;
}

/***********Main.cpp************/
/*******编译后放在...../invokeC/Qt/目录下************/

#include <QtGui/QApplication>
#include <QtCore/QTextCodec>
#include "MyTest.h"

int main(int argc,char *argv[])
{
   QApplication a(argc,argv);
   QTextCodec *codec = QTextCodec::codecForLocale();
   QTextCodec::setCodecForCStrings(codec);
   a.setFont(QApplication::font());
   
   MyTest *mt=new MyTest;
   mt->show();
   return a.exec();
}

运行结果:

(--------完--------)

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值