qt中如何运行外部程序,QProcess类  


2011-05-06 16:32:19|  分类: qt |  标签:qprocess  程序  arguments  mythread  started   |字号 订阅
QT中使用QProcess启用外部程序
启用外部程序,并可传参,默认第一个参数是exe路径!


启动外部程序的方法有以下两种:
1、start()


void QProcess::start ( const QString & program, const QStringList & arguments, OpenMode mode = ReadWrite )
Starts the program program in a new process, passing the command line arguments in arguments. The OpenMode is set to mode. QProcess will immediately enter the Starting state. If the process starts successfully,QProcess will emit started(); otherwise, error() will be emitted.


Note that arguments that contain spaces are not passed to the process as separate arguments.


Windows: Arguments that contain spaces are wrapped in quotes.


Note: Processes are started asynchronously, which means the started() and error() signals may be delayed. Call waitForStarted() to make sure the process has started (or has failed to start) and those signals have been emitted.


See also pid(), started(), and waitForStarted().
2、使用QProcess::execute(), 不过使用此方法时程序会最阻塞直到此方法执行的程序结束后返回,这时候可使用QProcess和QThread这两个类结合使用的方法来处理,以防止在主 线程中调用而导致阻塞的情况
先从QThread继承一个类,重新实现run()函数:


答:1、使用QProcess::startDetached()方法,启动外部程序后立即返回;
2、使用QProcess::execute(),不过使用此方法时程序会最阻塞直到此方法执行的程序结束后返回,这时候可使用QProcess和QThread这两个类结合使用的方法来处理,以防止在主线程中调用而导致阻塞的情况
先从QThread继承一个类,重新实现run()函数:


Quote:


class MyThread : public QThread 

 { 

 public: 

    void run(); 

 }; 



 void MyThread::run() 

 { 

 QProcess::execute("notepad.exe"); 

 }






这样,在使用的时候则可定义一个MyThread类型的成员变量,使用时调用其start()方法:




Quote:


class ...............
{...........
MyThread thread;
............
};


.....................
thread.start();


 
Qt中执行外部程序介绍 QProcess  


2012-09-02 13:57:57|  分类: #Qt图形界面 |  标签:qt;图形界面  linux;arm  beaglebone;嵌入式;   |字号 订阅
在Qt中如何调用外部程序呢? 最近遇到这个问题,解决方法如下:
 用QProcess类解决这个问题:
 如执行a.exe, 带两个参数为 -z20,-q85
 第一种方法:使用QProcess类静态函数QProcess::startDetached(const QString &program, const QStringList &argument)或者QProcess::execute(const QString &program, const QStringList &argument);
 startDetached 函数不会阻止进程, execute会阻止,即等到这个外部程序运行结束才继续执行本进程。
 QStringList  list;
 list<<"-q85"<<"-q85";
 QProcess::startDetached("a.exe",list); 或 QProcess::execute("a.exe",list);
 第二种方法:创建QProcess类,这种方法的好处是可以查看外部程序返回的数据,输出结果
 QProcess *pProces = new QProcess(this);
 connect(pProces, SIGNAL(readyRead()),this, SLOT(on_read()));
 QStringList  list;
 pProces->start("a.exe", list);
 
 slot 函数:

qprocess打开命令行窗口的问题 2011-07-31 00:58:09
发信人: pilipili (八戒,快救师父), 信区: KDE_Qt 
标  题: qprocess打开命令行窗口的问题 
发信站: 水木社区 (Sun Jul 31 00:58:09 2011), 站内 


QProcess f; 


f.start("cmd.exe"); 


为什么打开的命令行窗口总是隐藏,在任务管理器中可以看到cmd.exe的进程,但是没有窗 
口总是隐藏,不知道为什么? 
也试了在后面加一个参数"-k",也没有用,请教,qprocess是不是有什么讲究,谢谢! 
-- 


※ 来源:·水木社区 http://newsmth.net·[FROM: 114.249.130.*] 




hgoldfish Re: qprocess打开命令行窗口的问题 2011-07-31 02:28:47
发信人: hgoldfish (老鱼), 信区: KDE_Qt 
标  题: Re: qprocess打开命令行窗口的问题 
发信站: 水木社区 (Sun Jul 31 02:28:59 2011), 站内 


QProcess::startDetached() 


【 在 pilipili (八戒,快救师父) 的大作中提到: 】 
: QProcess f; 
: f.start("cmd.exe"); 
: 为什么打开的命令行窗口总是隐藏,在任务管理器中可以看到cmd.exe的进程,但是没有窗 
: ................... 


-- 
灭绝人性啊 




※ 来源:·水木社区 newsmth.net·[FROM: 222.77.80.*] 

void on_read() 

  { 

  QProcess *pProces = (QProcess *)sender(); 

  QString result = pProces->readAll(); 

  QMessageBox::warning(NULL, "", result); 
 }