• 9266阅读
  • 7回复

请问QT如何调用外部程序?? [复制链接]

上一主题 下一主题
离线guazi111
 

只看楼主 倒序阅读 楼主  发表于: 2006-05-20
比如调用自己写的一些shell脚本,或者其他的只赋予了执行权限但是没有加入到系统运行环境中的程序,比如这脚本就在QT程序的当前目录下

多谢多谢。

另:请教哪位机子里有QT3的examples?? 俺在sourceforge.net下载的setup-qt-win-free-mingw-3.3.4-3.exe装完之后没有,

哪位有能不能打包上传一下??

不胜感激
[ 此贴被XChinux在2006-05-21 09:31重新编辑 ]
离线acheng210
只看该作者 1楼 发表于: 2006-05-20
你可以在QT程序中用linux系统调用 system 函数去调用,或者fork 子进程都可以的,(加入他们的头文件)...
离线guazi111

只看该作者 2楼 发表于: 2006-05-20
用system()的话是不是要指出其绝对地址???

比如是system("/home/a/a.shell")当前文件夹里的脚本的话就是system("./a.shell")???

另外其中是不是可以加参数???

多谢指点
离线guazi111

只看该作者 3楼 发表于: 2006-05-21
请问能不能给个具体的示例??

俺写了一个一直都不行

/**************************************************
*
*
*dir.h
***************************************************/


——————————————————————————————————————

#ifndef DIR_H
#define DIR_H

#include <qwidget.h>
class DIR : QWidget

{
  Q_OBJECT
public:
  DIR(QWidget *parent=0, const char *name=0);

  public slots:
  void myslot();
  signals:
  }
void myslot()
{
  system("dir >>1.txt"); //不过检测不能检测到这个函数就是库连接,或头文件的事拉
}

#endif //DIR_H


/**************************************************
*
*
*dir.cpp
***************************************************/
_______________________________________________________


#include "dir.h"
#include <qpushbutton.h>
#include <qwidget.h>
   
DIR::DIR(QWidget *parnet, const char *name)
   :QWidget(parent, name)
{
   QPushButton *dir = new QPushButton("Dir", this, "dir");
   dir->setGeometry(62,60,75,30);
       connect( dir, SIGNAL(clicked()), this,SLOT(myslot()));
}


/**************************************************
*
*
*main.cpp
***************************************************/

___________________________________________________________

#include <qapplication.h>
#include <qpushbutton.h>
#include <qfont.h>


class MyWidget : public QWidget
{
public:
   MyWidget(QWidget *parent=0, const char *name=0);
};

   MyWidget::MyWidget(QWidget *parent, const char *name)
           :QWidget(parent, name)
{
   setMinimumSize(200,120);
   setMaximumSize(200,120);
   
   QPushButton *quit = new QPushButton("Quit", this, "quit");
   quit->setGeometry(62,20,75,30);
   QPushButton *dir = new QPushButton("Dir", this, "dir");
   dir->setGeometry(62,60,75,30);
   
   
   connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );

}
int main(int argc, char **argv)
{
   QApplication a(argc, argv);
   MyWidget w;
   w.setGeometry(100,100,200,120);
   a.setMainWidget(&w);
   w.show();
   return a.exec();
}




这个就是想用dir试试而已(或者linux下用ls),提示错误说



>make


makefile:89: warning: overriding commands for target `.'
makefile:86: warning: ignoring old commands for target `.'
g++ -c -mthreads -Wall -O2 -fno-exceptions -fno-rtti -DUNICODE -DQT_DLL -DQT_TH
READ_SUPPORT -DQT_NO_DEBUG -I"." -I"K:\jilei\source\Qt\qt-win-free-mingw-3.3.3\i
nclude" -I"K:\jilei\source\Qt\13" -I"K:\jilei\source\Qt\qt-win-free-mingw-3.3.3\
mkspecs\win32-g++" -o dir.o dir.cpp
In file included from dir.cpp:1:
dir.h:17: error: new types may not be defined in a return type
dir.h:17: error: two or more data types in declaration of `myslot'
In file included from K:/jilei/source/Qt/qt-win-free-mingw-3.3.3/include/qiconse
t.h:43,
          from K:/jilei/source/Qt/qt-win-free-mingw-3.3.3/include/qpushbu
tton.h:43,
          from dir.cpp:2:
K:/jilei/source/Qt/qt-win-free-mingw-3.3.3/include/qpixmap.h:250: warning: 'void
bitBlt(QPaintDevice*, int, int, const QPaintDevice*, int, int, int, int, Qt::Ra
sterOp, bool)' redeclared without dllimport attribute after being referenced wit
h dllimport linkage
dir.cpp: In constructor `DIR::DIR(QWidget*, const char*)':
dir.cpp:7: error: no matching function for call to `QWidget::QWidget(<unknown ty
pe>, const char*&)'
K:/jilei/source/Qt/qt-win-free-mingw-3.3.3/include/qwidget.h:61: note: candidate
s are: QWidget::QWidget(const QWidget&)
K:/jilei/source/Qt/qt-win-free-mingw-3.3.3/include/qwidget.h:135: note:
    QWidget::QWidget(QWidget*, const char*, uint)
make: *** [dir.o] Error 1
离线XChinux

只看该作者 4楼 发表于: 2006-05-21
QProcess
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线guazi111

只看该作者 5楼 发表于: 2006-05-21
XChinux 老大,能不能给一个比较具体些的示例??

只要一个比如按下按钮就通过ls列表当前目录下文件名称到一个文本就可以,终端下用ls >>1.txt即可,但是具体写应该如何呢??

俺是新手,您说的太简略俺看着太郁闷啊……
离线goldroc

只看该作者 6楼 发表于: 2006-05-30
QProcess 是最QT的方法,但是注意不能在非主线程调用。否则无法工作。
离线jacklee
只看该作者 7楼 发表于: 2006-06-18
QProcess pro;
pro.addArgument("bash");
pro.addArgument("./l");
pro.start();
快速回复
限100 字节
 
上一个 下一个