• 11693阅读
  • 8回复

Qt调用shell脚本 [复制链接]

上一主题 下一主题
离线alex_zhf
 
只看楼主 倒序阅读 楼主  发表于: 2008-11-08
— 本帖被 XChinux 执行加亮操作(2008-11-08) —
想在Qt中实现这样的功能:
构造一个槽,在其中调用执行一个shell脚本或者直接嵌入shell命令,想了下没想出来,google也收获不大,有没有高手知道的?
离线blood

只看该作者 1楼 发表于: 2008-11-08
QProcess
离线vrcats
只看该作者 2楼 发表于: 2008-11-08
QProcess::execute(...)
离线blood

只看该作者 3楼 发表于: 2008-11-08
vrcats来看看我的帖子呀
离线nliuser
只看该作者 4楼 发表于: 2008-11-08
system函数,试试看
离线alex_zhf
只看该作者 5楼 发表于: 2008-11-08
说得不错,system函数貌似不能把参数传进去吧,QProcess怎么样,我去看看
离线alex_zhf
只看该作者 6楼 发表于: 2008-11-08
引用第2楼vrcats于2008-11-08 17:20发表的  :
QProcess::execute(...)

有这函数?!
离线htyoung

只看该作者 7楼 发表于: 2008-11-08
引用楼主alex_zhf于2008-11-08 17:17发表的 Qt调用shell脚本 :
想在Qt中实现这样的功能:
构造一个槽,在其中调用执行一个shell脚本或者直接嵌入shell命令,想了下没想出来,google也收获不大,有没有高手知道的?


看看我这个类是不是符合你的要求,YXterm类

给个最简单的使用方法如调用 Linux shell命令 ls,查看home/user的文件

m_TermDebug = new YXterm(this);

connect( m_TermDebug, SIGNAL( stopExecuted () ), this, SLOT( slotEndDebug() ) );

  m_TermDebug->slotSetCommand("/home/user/");
  m_TermDebug->slotAddProgram("ls");
m_TermDebug->slotRunCommand();

运行完后,得到终端输出。
void slotEndDebug()
{

QString str;
  if(m_TermDebug)
  {
    for(int i=0;i<m_TermDebug->resList.size();i++)
    str=m_TermDebug->resList.at(i);
    qDebug(str.toAscii());
  }

}

关于YXterm如果感兴趣,可以看一下
Qt 个人作品展示 » TraceView 一个快速看代码的工具。
http://www.qtcn.org/bbs/read.php?tid=13285
然后在源代码 里搜一下YXterm的用法,里边有很多不同的使用,如调用脚本等。

类YXterm yxterm.zip (5 K) 下载次数:62

类声名:

/****************************************************************************
** File: yxterm.h
**
** Created: Sat Apr 8 16:23:51 2006
**      by: wya
**
**Modifier : 2006 11 15 for porting to QT4
**
** WARNING! All changes made by wya
****************************************************************************/

#ifndef YXTERM_H
#define YXTERM_H

#include <QObject>
#include <QProcess>
#include <QStringlist>



//----------------------------------------------------------------------
class YXterm;
class YXterm:public QObject
{
  Q_OBJECT
    public:

  YXterm(QObject * parent );
  virtual ~YXterm();
  public :
  int getcountreOfYXterm();
  QStringList errorList;
  QStringList resList;
  virtual bool isRunning();
  virtual bool isErrorEvent();
  virtual bool isErrorStop();
  virtual void setErrorStop(bool isStop);
  virtual void start_init();
  void setError(bool e){ isError=e;}
  bool getError(){ return isError;}
  bool addENV2PATH(const QString & en);

  public slots:
  virtual void slotReadFromStdout();
  virtual void slotReadFromStderr();
  virtual void slotReadEndProc(int exitCode ,QProcess::ExitStatus exitStatus );
  virtual void slotSetCommand(const QStringList & args);
  virtual void slotSetCommand(const QString & args);
  virtual void slotAddProgram(const QString & programme);

  virtual void slotSetWorkingDirectory(const QString & args);
  virtual void slotSetEnvironment(const QString & args);
  virtual void  slotAddPATH(const QString & args);

  virtual void slotRunCommand();
  virtual void stopRunCommand();
  virtual void slotStarted();
  virtual void slotError();
public:
    virtual QString getProgram(){return m_programme;}
    virtual QStringList getArgsList(){ return m_argsList;}

    QProcess * getProcess(){return proc;}
  signals:
      void stopExecuted();
protected:
      virtual void doConnection();
private: 
  QProcess *proc;
  bool isError;
  bool isErrorForceStop;
  QStringList m_argsList;
  QString  m_programme;
  static int counterOfYXterm;
  // QString idMapFileName;
  //QString mktagScriptName;
 
};
***
QT5
***
离线yzxlr
只看该作者 8楼 发表于: 2011-07-06
快速回复
限100 字节
 
上一个 下一个