不好意思又来问问题要麻烦大家看看...
主要就是在Qt app内呼叫非Qt写的外部app的问题
先简述我的APP运作环境:
MIPS embedded linux
有DirectFB
有embedded Qt 4.5.2
开发板接续HDMI LCD TV
本人透过开发板的RS-232下指令
我有个Qt写好的APP,姑且叫QtAP.exe吧,有GUI。执行起来主要就是
一个WebKit显示某个URL,例如wwww.google.com
另一个APP是类似一个movie player,会呼叫到DirectFB的library
就称呼为Player.exe吧。
首先是在console下,这样的顺序执行
1. "./QtAP.exe &"
把它丢到背景执行,尔后开发板的HDMI就可以看到WebKit运作起来了,
正确的显示google的页面~
2. "./Player.exe IP somemovie.mpg"
可以看到从Streaming Server来的电影播放(虽然把WebKit盖住...)
单独执行Player.exe也是正常可以放电影
尔后透过QThread内呼叫QProcess...
却一下子画面就变黑,QThread的run函式却是似乎没有被执行到
.h file
- #ifndef PLAYERTHREAD_H
- #define PLAYERTHREAD_H
- #include <QtCore/QProcess>
- #include <QtCore/QThread>
- class PlayerThread : public QThread
- {
- public:
- PlayerThread();
- void run();
- void stop();
- void setupRTSP(QString ip, QString filePath);
- QProcess *playerProcess;
- QString commandString;
- };
.cpp file
- #include "playerthread.h"
- PlayerThread::PlayerThread()
- {}
- void PlayerThread::setupRTSP(QString ip, QString filePath)
- {
- fprintf(stderr, "Player thread : Setting up RTSP Player...\n\n");
- playerProcess=new QProcess(this);
- this->commandString.append("./Player.exe ");
- this->commandString.append(ip);
- this->commandString.append(" ");
- this->commandString.append(filePath);
- this->commandString.append(" &");
- }
- void PlayerThread::run()
- {
- fprintf(stderr, "Player thread : Ready to execute: %s\n\n", this->commandString); // 这行没有输出,所以我猜之后的code应该都没被执行
- playerProcess->execute(this->commandString);
- playerProcess->waitForStarted();
- this->setPriority(QThread::LowPriority);
- }
- void PlayerThread::stop()
- {
- playerProcess->terminate();
- }
在main内,我是这么呼叫该QThread的:
- #include "playerthread.h"
- PlayerThread playerT;
- playerT.setupRTSP(ip, filePath);
- playerT.start();
在Qt内呼叫外部的可执行档案,是否有什么限制?