本文整理汇总了C++中QProcess::state方法的典型用法代码示例。如果您正苦于以下问题:C++ QProcess::state方法的具体用法?C++ QProcess::state怎么用?C++ QProcess::state使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QProcess
的用法示例。
在下文中一共展示了QProcess::state方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: checkVersion
unsigned int AbstractTool::checkVersion(bool &modified)
{
if(m_preferences->getSkipVersionTest())
{
log("Warning: Skipping the version check this time!");
return makeRevision(0xFFF0, 0xFFF0);
}
QProcess process;
QList<QRegExp*> patterns;
QStringList cmdLine;
//Init encoder-specific values
checkVersion_init(patterns, cmdLine);
log("Creating process:");
if(!startProcess(process, getBinaryPath(), cmdLine))
{
return false;
}
bool bTimeout = false;
bool bAborted = false;
unsigned int revision = UINT_MAX;
unsigned int coreVers = UINT_MAX;
modified = false;
while(process.state() != QProcess::NotRunning)
{
if(*m_abort)
{
process.kill();
bAborted = true;
break;
}
if(!process.waitForReadyRead())
{
if(process.state() == QProcess::Running)
{
process.kill();
qWarning("process timed out <-- killing!");
log("\nPROCESS TIMEOUT !!!");
bTimeout = true;
break;
}
}
PROCESS_PENDING_LINES(process, checkVersion_parseLine, patterns, coreVers, revision, modified);
}
if(!(bTimeout || bAborted))
{
PROCESS_PENDING_LINES(process, checkVersion_parseLine, patterns, coreVers, revision, modified);
}
process.waitForFinished();
if(process.state() != QProcess::NotRunning)
{
process.kill();
process.waitForFinished(-1);
}
while(!patterns.isEmpty())
{
QRegExp *pattern = patterns.takeFirst();
MUTILS_DELETE(pattern);
}
if(bTimeout || bAborted || (!checkVersion_succeeded(process.exitCode())))
{
if(!(bTimeout || bAborted))
{
log(tr("\nPROCESS EXITED WITH ERROR CODE: %1").arg(QString::number(process.exitCode())));
}
return UINT_MAX;
}
if((revision == UINT_MAX) || (coreVers == UINT_MAX))
{
log(tr("\nFAILED TO DETERMINE VERSION INFO !!!"));
return UINT_MAX;
}
return makeRevision(coreVers, revision);
}
示例2: apply
bool NormalizeFilter::apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *formatInfo, volatile bool *abortFlag)
{
QProcess process;
QStringList args;
QString eqMode = (m_equalizationMode == 0) ? "-n" : ((m_equalizationMode == 1) ? "-ne" : "-nb");
process.setWorkingDirectory(QFileInfo(outputFile).canonicalPath());
args << "-V3" << "-S";
args << "--temp" << ".";
args << QDir::toNativeSeparators(sourceFile);
args << QDir::toNativeSeparators(outputFile);
args << "gain";
args << eqMode << QString().sprintf("%.2f", static_cast<double>(m_peakVolume) / 100.0);
if(!startProcess(process, m_binary, args))
{
return false;
}
bool bTimeout = false;
bool bAborted = false;
QRegExp regExp("In:(\\d+)(\\.\\d+)*%");
while(process.state() != QProcess::NotRunning)
{
if(*abortFlag)
{
process.kill();
bAborted = true;
emit messageLogged("\nABORTED BY USER !!!");
break;
}
process.waitForReadyRead(m_processTimeoutInterval);
if(!process.bytesAvailable() && process.state() == QProcess::Running)
{
process.kill();
qWarning("SoX process timed out <-- killing!");
emit messageLogged("\nPROCESS TIMEOUT !!!");
bTimeout = true;
break;
}
while(process.bytesAvailable() > 0)
{
QByteArray line = process.readLine();
QString text = QString::fromUtf8(line.constData()).simplified();
if(regExp.lastIndexIn(text) >= 0)
{
bool ok = false;
int progress = regExp.cap(1).toInt(&ok);
if(ok) emit statusUpdated(progress);
}
else if(!text.isEmpty())
{
emit messageLogged(text);
}
}
}
process.waitForFinished();
if(process.state() != QProcess::NotRunning)
{
process.kill();
process.waitForFinished(-1);
}
emit statusUpdated(100);
emit messageLogged(QString().sprintf("\nExited with code: 0x%04X", process.exitCode()));
if(bTimeout || bAborted || process.exitCode() != EXIT_SUCCESS || QFileInfo(outputFile).size() == 0)
{
return false;
}
return true;
}
示例3: decode
bool SpeexDecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
{
QProcess process;
QStringList args;
args << "-V";
args << QDir::toNativeSeparators(sourceFile);
args << QDir::toNativeSeparators(outputFile);
if(!startProcess(process, m_binary, args))
{
return false;
}
bool bTimeout = false;
bool bAborted = false;
QRegExp regExp("Working\\.\\.\\. (.)");
while(process.state() != QProcess::NotRunning)
{
if(*abortFlag)
{
process.kill();
bAborted = true;
emit messageLogged("\nABORTED BY USER !!!");
break;
}
process.waitForReadyRead(m_processTimeoutInterval);
if(!process.bytesAvailable() && process.state() == QProcess::Running)
{
process.kill();
qWarning("SpeexDec process timed out <-- killing!");
emit messageLogged("\nPROCESS TIMEOUT !!!");
bTimeout = true;
break;
}
while(process.bytesAvailable() > 0)
{
QByteArray line = process.readLine();
QString text = QString::fromUtf8(line.constData()).simplified();
if(regExp.lastIndexIn(text) >= 0)
{
/* qDebug("Status: %s", regExp.cap(1).toLatin1().constData()); */
}
else if(!text.isEmpty())
{
emit messageLogged(text);
}
}
}
process.waitForFinished();
if(process.state() != QProcess::NotRunning)
{
process.kill();
process.waitForFinished(-1);
}
emit statusUpdated(100);
emit messageLogged(QString().sprintf("\nExited with code: 0x%04X", process.exitCode()));
if(bTimeout || bAborted || process.exitCode() != EXIT_SUCCESS || QFileInfo(outputFile).size() == 0)
{
return false;
}
return true;
}
示例4: onAddEngine
void DialogEngines::onAddEngine() {
QString fileName = QFileDialog::getOpenFileName(this,
tr("Add UCI Engine"), this->lastAddedEnginePath, tr("UCI Engines (*)"));
fileName = QString('"').append(fileName).append('"');
QDir d = QFileInfo(fileName).absoluteDir();
this->lastAddedEnginePath = d.absolutePath();
this->setEnabled(false);
QProcess process;
process.start(fileName,QIODevice::ReadWrite);
// Wait for process to start
if(!process.waitForStarted(500)) {
// if process doesn't start, just ignore
} else {
process.write("uci\n");
process.waitForBytesWritten();
// give the engine 700 ms to respond to
// the uci command
this->delay(700);
// read generated output
QString output = QString("");
// give another 50 ms until the engine outputs info
process.waitForReadyRead(50) ;
output.append(process.readAllStandardOutput());
// look for engine id
QString engine_name = QString("");
QRegularExpression regExpEngineName = QRegularExpression("id\\sname\\s(\\w|\\s|\\S)+");
QRegularExpressionMatch m_id = regExpEngineName.match(output);
if(m_id.hasMatch()) {
int len = m_id.capturedLength(0);
engine_name = m_id.captured(0).mid(8,len-1).split("\n").at(0);
}
// attempt to quit the engine
process.write("quit\n");
process.waitForBytesWritten();
process.waitForFinished(250);
// if still running, kill it
if(process.state() == QProcess::Running) {
// if engine doesn't response, it could mean that
// this is no engine _or_ (as in the case of e.g arasanx-64
// takes an extremely long time to respond to "quit".
// kill it ...
process.kill();
process.waitForFinished();
}
// ... however even if we had to kill the engine, as
// long as the engine provided us with a proper name, we
// assume that we found a real uci engine
if(!engine_name.isEmpty()) {
Engine new_engine = Engine();
new_engine.setName(engine_name);
new_engine.setPath(fileName);
this->engines.append(new_engine);
QListWidgetItem *item = new QListWidgetItem(new_engine.getName());
this->lstEngines->addItem(item);
item->setSelected(true);
this->update();
}
}
this->setEnabled(true);
}
示例5: encode
bool QAACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const QString &outputFile, volatile bool *abortFlag)
{
QProcess process;
QStringList args;
process.setWorkingDirectory(QFileInfo(outputFile).canonicalPath());
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("PATH", QDir::toNativeSeparators(QString("%1;%1/QTfiles;%2").arg(QDir(QCoreApplication::applicationDirPath()).canonicalPath(), lamexp_temp_folder2())));
process.setProcessEnvironment(env);
if(m_configRCMode != SettingsModel::VBRMode)
{
switch(m_configProfile)
{
case 2:
case 3:
args << "--he"; //Forces use of HE AAC profile (there is no explicit HEv2 switch for QAAC)
break;
}
}
switch(m_configRCMode)
{
case SettingsModel::CBRMode:
args << "--cbr" << QString::number(qBound(8, index2bitrate(m_configBitrate), 576));
break;
case SettingsModel::ABRMode:
args << "--abr" << QString::number(qBound(8, index2bitrate(m_configBitrate), 576));
break;
case SettingsModel::VBRMode:
args << "--tvbr" << QString::number(g_qaacVBRQualityLUT[qBound(0, m_configBitrate , 14)]);
break;
default:
THROW("Bad rate-control mode!");
break;
}
if(!m_configCustomParams.isEmpty()) args << m_configCustomParams.split(" ", QString::SkipEmptyParts);
if(!metaInfo.title().isEmpty()) args << "--title" << cleanTag(metaInfo.title());
if(!metaInfo.artist().isEmpty()) args << "--artist" << cleanTag(metaInfo.artist());
if(!metaInfo.album().isEmpty()) args << "--album" << cleanTag(metaInfo.album());
if(!metaInfo.genre().isEmpty()) args << "--genre" << cleanTag(metaInfo.genre());
if(!metaInfo.comment().isEmpty()) args << "--comment" << cleanTag( metaInfo.comment());
if(metaInfo.year()) args << "--date" << QString::number(metaInfo.year());
if(metaInfo.position()) args << "--track" << QString::number(metaInfo.position());
if(!metaInfo.cover().isEmpty()) args << "--artwork" << metaInfo.cover();
args << "-d" << ".";
args << "-o" << QDir::toNativeSeparators(outputFile);
args << QDir::toNativeSeparators(sourceFile);
if(!startProcess(process, m_binary_qaac, args))
{
return false;
}
bool bTimeout = false;
bool bAborted = false;
int prevProgress = -1;
QRegExp regExp("\\[(\\d+)\\.(\\d)%\\]");
while(process.state() != QProcess::NotRunning)
{
if(*abortFlag)
{
process.kill();
bAborted = true;
emit messageLogged("\nABORTED BY USER !!!");
break;
}
process.waitForReadyRead(m_processTimeoutInterval);
if(!process.bytesAvailable() && process.state() == QProcess::Running)
{
process.kill();
qWarning("QAAC process timed out <-- killing!");
emit messageLogged("\nPROCESS TIMEOUT !!!");
bTimeout = true;
break;
}
while(process.bytesAvailable() > 0)
{
QByteArray line = process.readLine();
QString text = QString::fromUtf8(line.constData()).simplified();
if(regExp.lastIndexIn(text) >= 0)
{
bool ok = false;
int progress = regExp.cap(1).toInt(&ok);
if(ok && (progress > prevProgress))
{
emit statusUpdated(progress);
prevProgress = qMin(progress + 2, 99);
}
}
else if(!text.isEmpty())
{
emit messageLogged(text);
}
//.........这里部分代码省略.........
示例6: convertGPSFile
void QgsGPSPlugin::convertGPSFile( const QString& inputFileName,
int convertType,
const QString& outputFileName,
const QString& layerName )
{
// what features does the user want to import?
QStringList convertStrings;
switch ( convertType )
{
case 0:
convertStrings << QStringLiteral( "-x" ) << QStringLiteral( "transform,wpt=rte,del" );
break;
case 1:
convertStrings << QStringLiteral( "-x" ) << QStringLiteral( "transform,rte=wpt,del" );
break;
case 2:
convertStrings << QStringLiteral( "-x" ) << QStringLiteral( "transform,trk=wpt,del" );
break;
case 3:
convertStrings << QStringLiteral( "-x" ) << QStringLiteral( "transform,wpt=trk,del" );
break;
default:
QgsDebugMsg( "Illegal conversion index!" );
return;
}
// try to start the gpsbabel process
QStringList babelArgs;
babelArgs << mBabelPath << QStringLiteral( "-i" ) << QStringLiteral( "gpx" ) << QStringLiteral( "-f" ) << QStringLiteral( "\"%1\"" ).arg( inputFileName )
<< convertStrings << QStringLiteral( "-o" ) << QStringLiteral( "gpx" ) << QStringLiteral( "-F" ) << QStringLiteral( "\"%1\"" ).arg( outputFileName );
QgsDebugMsg( QString( "Conversion command: " ) + babelArgs.join( "|" ) );
QProcess babelProcess;
babelProcess.start( babelArgs.join( QStringLiteral( " " ) ) );
if ( !babelProcess.waitForStarted() )
{
QMessageBox::warning( nullptr, tr( "Could not start process" ),
tr( "Could not start GPSBabel!" ) );
return;
}
// wait for gpsbabel to finish (or the user to cancel)
QProgressDialog progressDialog( tr( "Importing data..." ), tr( "Cancel" ), 0, 0 );
progressDialog.setWindowModality( Qt::WindowModal );
for ( int i = 0; babelProcess.state() == QProcess::Running; ++i )
{
progressDialog.setValue( i / 64 );
if ( progressDialog.wasCanceled() )
return;
}
// did we get any data?
if ( babelProcess.exitStatus() != 0 )
{
QString babelError( babelProcess.readAllStandardError() );
QString errorMsg( tr( "Could not convert data from %1!\n\n" )
.arg( inputFileName ) );
errorMsg += babelError;
QMessageBox::warning( nullptr, tr( "Error converting data" ), errorMsg );
return;
}
// add the layer
switch ( convertType )
{
case 0:
case 3:
emit drawVectorLayer( outputFileName + "?type=waypoint",
layerName, QStringLiteral( "gpx" ) );
break;
case 1:
emit drawVectorLayer( outputFileName + "?type=route",
layerName, QStringLiteral( "gpx" ) );
break;
case 2:
emit drawVectorLayer( outputFileName + "?type=track",
layerName, QStringLiteral( "gpx" ) );
break;
default:
QgsDebugMsg( "Illegal conversion index!" );
return;
}
emit closeGui();
}
示例7: uploadToGPS
void QgsGPSPlugin::uploadToGPS( QgsVectorLayer* gpxLayer, const QString& device,
const QString& port )
{
const QString& source( gpxLayer->dataProvider()->dataSourceUri() );
// what kind of data does the user want to upload?
QString typeArg, features;
if ( source.right( 8 ) == QLatin1String( "waypoint" ) )
{
typeArg = QStringLiteral( "-w" );
features = QStringLiteral( "waypoints" );
}
else if ( source.right( 5 ) == QLatin1String( "route" ) )
{
typeArg = QStringLiteral( "-r" );
features = QStringLiteral( "routes" );
}
else if ( source.right( 5 ) == QLatin1String( "track" ) )
{
typeArg = QStringLiteral( "-t" );
features = QStringLiteral( "tracks" );
}
else
{
QgsDebugMsg( source.right( 8 ) );
assert( false );
}
// try to start the gpsbabel process
QStringList babelArgs =
mDevices[device]->exportCommand( mBabelPath, typeArg,
source.left( source.lastIndexOf( '?' ) ), port );
if ( babelArgs.isEmpty() )
{
QMessageBox::warning( nullptr, tr( "Not supported" ),
tr( "This device does not support uploading of %1." )
.arg( features ) );
return;
}
QgsDebugMsg( QString( "Upload command: " ) + babelArgs.join( "|" ) );
QProcess babelProcess;
babelProcess.start( babelArgs.join( QStringLiteral( " " ) ) );
if ( !babelProcess.waitForStarted() )
{
QMessageBox::warning( nullptr, tr( "Could not start process" ),
tr( "Could not start GPSBabel!" ) );
return;
}
// wait for gpsbabel to finish (or the user to cancel)
QProgressDialog progressDialog( tr( "Uploading data..." ), tr( "Cancel" ), 0, 0 );
progressDialog.setWindowModality( Qt::WindowModal );
for ( int i = 0; babelProcess.state() == QProcess::Running; ++i )
{
progressDialog.setValue( i / 64 );
if ( progressDialog.wasCanceled() )
return;
}
// did we get an error?
if ( babelProcess.exitStatus() != 0 )
{
QString babelError( babelProcess.readAllStandardError() );
QString errorMsg( tr( "Error while uploading data to GPS!\n\n" ) );
errorMsg += babelError;
QMessageBox::warning( nullptr, tr( "Error uploading data" ), errorMsg );
return;
}
// everything was OK, remember this device for next time
QSettings settings;
settings.setValue( QStringLiteral( "/Plugin-GPS/lastuldevice" ), device );
settings.setValue( QStringLiteral( "/Plugin-GPS/lastulport" ), port );
emit closeGui();
}
示例8: analyzeFile
const AudioFileModel AnalyzeTask::analyzeFile(const QString &filePath, int *type)
{
*type = fileTypeNormal;
AudioFileModel audioFile(filePath);
QFile readTest(filePath);
if(!readTest.open(QIODevice::ReadOnly))
{
*type = fileTypeDenied;
return audioFile;
}
if(checkFile_CDDA(readTest))
{
*type = fileTypeCDDA;
return audioFile;
}
readTest.close();
bool skipNext = false;
QPair<quint32, quint32> id_val(UINT_MAX, UINT_MAX);
quint32 coverType = UINT_MAX;
QByteArray coverData;
QStringList params;
params << QString("--Inform=file://%1").arg(QDir::toNativeSeparators(m_templateFile));
params << QDir::toNativeSeparators(filePath);
QProcess process;
MUtils::init_process(process, QFileInfo(m_mediaInfoBin).absolutePath());
process.start(m_mediaInfoBin, params);
if(!process.waitForStarted())
{
qWarning("MediaInfo process failed to create!");
qWarning("Error message: \"%s\"\n", process.errorString().toLatin1().constData());
process.kill();
process.waitForFinished(-1);
return audioFile;
}
while(process.state() != QProcess::NotRunning)
{
if(*m_abortFlag)
{
process.kill();
qWarning("Process was aborted on user request!");
break;
}
if(!process.waitForReadyRead())
{
if(process.state() == QProcess::Running)
{
qWarning("MediaInfo time out. Killing process and skipping file!");
process.kill();
process.waitForFinished(-1);
return audioFile;
}
}
QByteArray data;
while(process.canReadLine())
{
QString line = QString::fromUtf8(process.readLine().constData()).simplified();
if(!line.isEmpty())
{
//qDebug("Line:%s", MUTILS_UTF8(line));
int index = line.indexOf('=');
if(index > 0)
{
QString key = line.left(index).trimmed();
QString val = line.mid(index+1).trimmed();
if(!key.isEmpty())
{
updateInfo(audioFile, skipNext, id_val, coverType, coverData, key, val);
}
}
}
}
}
if(audioFile.metaInfo().title().isEmpty())
{
QString baseName = QFileInfo(filePath).fileName();
int index = baseName.lastIndexOf(".");
if(index >= 0)
{
baseName = baseName.left(index);
}
baseName = baseName.replace("_", " ").simplified();
index = baseName.lastIndexOf(" - ");
if(index >= 0)
{
baseName = baseName.mid(index + 3).trimmed();
//.........这里部分代码省略.........
示例9: analyzeAvisynthFile
bool AnalyzeTask::analyzeAvisynthFile(const QString &filePath, AudioFileModel &info)
{
QProcess process;
MUtils::init_process(process, QFileInfo(m_avs2wavBin).absolutePath());
process.start(m_avs2wavBin, QStringList() << QDir::toNativeSeparators(filePath) << "?");
if(!process.waitForStarted())
{
qWarning("AVS2WAV process failed to create!");
qWarning("Error message: \"%s\"\n", process.errorString().toLatin1().constData());
process.kill();
process.waitForFinished(-1);
return false;
}
bool bInfoHeaderFound = false;
while(process.state() != QProcess::NotRunning)
{
if(*m_abortFlag)
{
process.kill();
qWarning("Process was aborted on user request!");
break;
}
if(!process.waitForReadyRead())
{
if(process.state() == QProcess::Running)
{
qWarning("AVS2WAV time out. Killing process and skipping file!");
process.kill();
process.waitForFinished(-1);
return false;
}
}
QByteArray data;
while(process.canReadLine())
{
QString line = QString::fromUtf8(process.readLine().constData()).simplified();
if(!line.isEmpty())
{
int index = line.indexOf(':');
if(index > 0)
{
QString key = line.left(index).trimmed();
QString val = line.mid(index+1).trimmed();
if(bInfoHeaderFound && !key.isEmpty() && !val.isEmpty())
{
if(key.compare("TotalSeconds", Qt::CaseInsensitive) == 0)
{
bool ok = false;
unsigned int duration = val.toUInt(&ok);
if(ok) info.techInfo().setDuration(duration);
}
if(key.compare("SamplesPerSec", Qt::CaseInsensitive) == 0)
{
bool ok = false;
unsigned int samplerate = val.toUInt(&ok);
if(ok) info.techInfo().setAudioSamplerate (samplerate);
}
if(key.compare("Channels", Qt::CaseInsensitive) == 0)
{
bool ok = false;
unsigned int channels = val.toUInt(&ok);
if(ok) info.techInfo().setAudioChannels(channels);
}
if(key.compare("BitsPerSample", Qt::CaseInsensitive) == 0)
{
bool ok = false;
unsigned int bitdepth = val.toUInt(&ok);
if(ok) info.techInfo().setAudioBitdepth(bitdepth);
}
}
}
else
{
if(line.contains("[Audio Info]", Qt::CaseInsensitive))
{
info.techInfo().setAudioType("Avisynth");
info.techInfo().setContainerType("Avisynth");
bInfoHeaderFound = true;
}
}
}
}
}
process.waitForFinished();
if(process.state() != QProcess::NotRunning)
{
process.kill();
process.waitForFinished(-1);
}
//Check exit code
//.........这里部分代码省略.........
示例10: indexAttachment
// Index any PDFs that are attached. Basically it turns the PDF into text and adds it the same
// way as a note's body
void IndexRunner::indexAttachment(qint32 lid, Resource &r) {
return;
ResourceTable rtable(&db->conn);
qint32 reslid = rtable.getLid(r.guid);
if (lid <= 0 || !keepRunning || pauseIndexing)
return;
QString extension = "";
if (r.__isset.attributes && r.attributes.__isset.fileName) {
extension = QString::fromStdString(r.attributes.fileName);
int i = extension.indexOf(".");
extension = extension.mid(i);
}
if (extension == ".exe" || extension == ".dlL" || extension == ".zip" ||
extension == ".bz" || extension == ".tar.gz" || extension == ".tar")
return;
QString file = global.fileManager.getDbaDirPath() + QString::number(reslid) +extension;
QString outFile = global.fileManager.getDbaDirPath() + QString::number(reslid) + "-index.txt";
QProcess sofficeProcess;
sofficeProcess.start("soffice --headless --convert-to txt:\"text\" "+file,
QIODevice::ReadWrite|QIODevice::Unbuffered);
QLOG_DEBUG() << "Starting soffice " << sofficeProcess.waitForStarted();
QLOG_DEBUG() << "Stopping soffice " << sofficeProcess.waitForFinished() << " Return Code: " << sofficeProcess.state();
QLOG_DEBUG() << "soffice Errors:" << sofficeProcess.readAllStandardError();
QLOG_DEBUG() << "soffice Output:" << sofficeProcess.readAllStandardOutput();
return;
QSqlQuery sql(db->conn);
sql.prepare("Insert into SearchIndex (lid, weight, source, content) values (:lid, :weight, 'recognition', :content)");
sql.bindValue(":lid", lid);
sql.bindValue(":weight", 100);
//sql.bindValue(":content", text);
sql.exec();
}
示例11: l
/// called after "file" set in constructor
void g2m::interpret() {
//success = false;
QProcess toCanon;
bool foundEOF; // checked at the end
if (!startInterp(toCanon)) // finds rs274, reads tooltable, start interpreter
return;
if (!toCanon.waitForReadyRead(1000) ) {
if ( toCanon.state() == QProcess::NotRunning ){
infoMsg("Interpreter died. Bad tool table?");
} else
infoMsg("Interpreter timed out for an unknown reason.");
std::cout << "stderr: " << (const char*)toCanon.readAllStandardError() << std::endl;
std::cout << "stdout: " << (const char*)toCanon.readAllStandardOutput() << std::endl;
toCanon.close();
return;
}
// rs274 has now started correctly, and is ready to read ngc-file
qint64 lineLength;
char line[260];
int fails = 0;
do {
if (toCanon.canReadLine()) {
lineLength = toCanon.readLine(line, sizeof(line)); // read one output line from rs274
if (lineLength != -1 ) {
QString l(line);
emit canonLineMessage( l.left(l.size()-1) );
foundEOF = processCanonLine(line); // line is a canon-line
} else { //shouldn't get here!
std::cout << " ERROR: lineLength= " << lineLength << " fails="<< fails << "\n";
fails++;
}
} else {
std::cout << " ERROR: toCanon.canReadLine() fails="<< fails << "\n";
fails++;
}
toCanon.waitForReadyRead();
} while ( (fails < 100) &&
( (toCanon.canReadLine()) ||
( toCanon.state() != QProcess::NotRunning ) ) );
if (fails > 1) {
if (fails < 100) {
infoMsg("Waited for interpreter over 100 times.");
} else {
infoMsg("Waited 100 seconds for interpreter. Giving up.");
toCanon.close();
return;
}
}
std::string s = (const char *)toCanon.readAllStandardError();
s.erase(0,s.find("executing"));
if (s.size() > 10) {
infoMsg("Interpreter exited with error:\n"+s.substr(10));
return;
}
if (!foundEOF) {
infoMsg("Warning: file data not terminated correctly. If the file is terminated correctly, this indicates a problem interpreting the file.");
}
emit debugMessage( tr("g2m: read %1 lines of g-code which produced %2 canon-lines.").arg(gcode_lines).arg(lineVector.size()) );
return;
}
示例12: regExp
bool MP3Decoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
{
QProcess process;
QStringList args;
args << "-v" << "--utf8" << "-w" << QDir::toNativeSeparators(outputFile);
args << QDir::toNativeSeparators(sourceFile);
if(!startProcess(process, m_binary, args))
{
return false;
}
bool bTimeout = false;
bool bAborted = false;
int prevProgress = -1;
QRegExp regExp("\\b\\d+\\+\\d+\\s+(\\d+):(\\d+)\\.(\\d+)\\+(\\d+):(\\d+)\\.(\\d+)\\b");
while(process.state() != QProcess::NotRunning)
{
if(*abortFlag)
{
process.kill();
bAborted = true;
emit messageLogged("\nABORTED BY USER !!!");
break;
}
process.waitForReadyRead(m_processTimeoutInterval);
if(!process.bytesAvailable() && process.state() == QProcess::Running)
{
process.kill();
qWarning("mpg123 process timed out <-- killing!");
emit messageLogged("\nPROCESS TIMEOUT !!!");
bTimeout = true;
break;
}
while(process.bytesAvailable() > 0)
{
QByteArray line = process.readLine();
QString text = QString::fromUtf8(line.constData()).simplified();
if(regExp.lastIndexIn(text) >= 0)
{
quint32 values[6];
if (MUtils::regexp_parse_uint32(regExp, values, 6))
{
const double timeDone = (60.0 * double(values[0])) + double(values[1]) + (double(values[2]) / 100.0);
const double timeLeft = (60.0 * double(values[3])) + double(values[4]) + (double(values[5]) / 100.0);
if ((timeDone >= 0.005) || (timeLeft >= 0.005))
{
const int newProgress = qRound((static_cast<double>(timeDone) / static_cast<double>(timeDone + timeLeft)) * 100.0);
if (newProgress > prevProgress)
{
emit statusUpdated(newProgress);
prevProgress = qMin(newProgress + 2, 99);
}
}
}
}
else if(!text.isEmpty())
{
emit messageLogged(text);
}
}
}
process.waitForFinished();
if(process.state() != QProcess::NotRunning)
{
process.kill();
process.waitForFinished(-1);
}
emit statusUpdated(100);
emit messageLogged(QString().sprintf("\nExited with code: 0x%04X", process.exitCode()));
if(bTimeout || bAborted || process.exitCode() != EXIT_SUCCESS)
{
return false;
}
return true;
}
示例13: isDead
bool ProcessSocket::isDead()
{
QProcess *proc = qobject_cast<QProcess *>(d);
Q_ASSERT(proc);
return proc->state() != QProcess::Running;
}
示例14: encode
bool OpusEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const QString &outputFile, volatile bool *abortFlag)
{
QProcess process;
QStringList args;
switch(m_configRCMode)
{
case SettingsModel::VBRMode:
args << "--vbr";
break;
case SettingsModel::ABRMode:
args << "--cvbr";
break;
case SettingsModel::CBRMode:
args << "--hard-cbr";
break;
default:
THROW("Bad rate-control mode!");
break;
}
args << "--comp" << QString::number(m_configEncodeComplexity);
switch(m_configFrameSize)
{
case 0:
args << "--framesize" << "2.5";
break;
case 1:
args << "--framesize" << "5";
break;
case 2:
args << "--framesize" << "10";
break;
case 3:
args << "--framesize" << "20";
break;
case 4:
args << "--framesize" << "40";
break;
case 5:
args << "--framesize" << "60";
break;
}
args << QString("--bitrate") << QString::number(qBound(8, (m_configBitrate + 1) * 8, 256));
if(!metaInfo.title().isEmpty()) args << "--title" << cleanTag(metaInfo.title());
if(!metaInfo.artist().isEmpty()) args << "--artist" << cleanTag(metaInfo.artist());
if(!metaInfo.album().isEmpty()) args << "--album" << cleanTag(metaInfo.album());
if(!metaInfo.genre().isEmpty()) args << "--genre" << cleanTag(metaInfo.genre());
if(metaInfo.year()) args << "--date" << QString::number(metaInfo.year());
if(metaInfo.position()) args << "--comment" << QString("tracknumber=%1").arg(QString::number(metaInfo.position()));
if(!metaInfo.comment().isEmpty()) args << "--comment" << QString("comment=%1").arg(cleanTag(metaInfo.comment()));
if(!m_configCustomParams.isEmpty()) args << m_configCustomParams.split(" ", QString::SkipEmptyParts);
args << QDir::toNativeSeparators(sourceFile);
args << QDir::toNativeSeparators(outputFile);
if(!startProcess(process, m_binary, args))
{
return false;
}
bool bTimeout = false;
bool bAborted = false;
int prevProgress = -1;
QRegExp regExp("\\((\\d+)%\\)");
while(process.state() != QProcess::NotRunning)
{
if(*abortFlag)
{
process.kill();
bAborted = true;
emit messageLogged("\nABORTED BY USER !!!");
break;
}
process.waitForReadyRead(m_processTimeoutInterval);
if(!process.bytesAvailable() && process.state() == QProcess::Running)
{
process.kill();
qWarning("Opus process timed out <-- killing!");
emit messageLogged("\nPROCESS TIMEOUT !!!");
bTimeout = true;
break;
}
while(process.bytesAvailable() > 0)
{
QByteArray line = process.readLine();
QString text = QString::fromUtf8(line.constData()).simplified();
if(regExp.lastIndexIn(text) >= 0)
{
bool ok = false;
int progress = regExp.cap(1).toInt(&ok);
if(ok && (progress > prevProgress))
{
emit statusUpdated(progress);
//.........这里部分代码省略.........
示例15: apply
bool DownmixFilter::apply(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
{
unsigned int channels = detectChannels(sourceFile, abortFlag);
emit messageLogged(QString().sprintf("--> Number of channels is: %d\n", channels));
if((channels == 1) || (channels == 2))
{
messageLogged("Skipping downmix!");
qDebug("Dowmmix not required for Mono or Stereo input, skipping!");
return false;
}
QProcess process;
QStringList args;
process.setWorkingDirectory(QFileInfo(outputFile).canonicalPath());
args << "-V3" << "-S";
args << "--guard" << "--temp" << ".";
args << QDir::toNativeSeparators(sourceFile);
args << QDir::toNativeSeparators(outputFile);
switch(channels)
{
case 3: //3.0 (L/R/C)
args << "remix" << "1v0.66,3v0.34" << "2v0.66,3v0.34";
break;
case 4: //3.1 (L/R/C/LFE)
args << "remix" << "1v0.5,3v0.25,4v0.25" << "2v0.5,3v0.25,4v0.25";
break;
case 5: //5.0 (L/R/C/BL/BR)
args << "remix" << "1v0.5,3v0.25,4v0.25" << "2v0.5,3v0.25,5v0.25";
break;
case 6: //5.1 (L/R/C/LFE/BL/BR)
args << "remix" << "1v0.4,3v0.2,4v0.2,5v0.2" << "2v0.4,3v0.2,4v0.2,6v0.2";
break;
case 7: //7.0 (L/R/C/BL/BR/SL/SR)
args << "remix" << "1v0.4,3v0.2,4v0.2,6v0.2" << "2v0.4,3v0.2,5v0.2,7v0.2";
break;
case 8: //7.1 (L/R/C/LFE/BL/BR/SL/SR)
args << "remix" << "1v0.36,3v0.16,4v0.16,5v0.16,7v0.16" << "2v0.36,3v0.16,4v0.16,6v0.16,8v0.16";
break;
case 9: //8.1 (L/R/C/LFE/BL/BR/SL/SR/BC)
args << "remix" << "1v0.308,3v0.154,4v0.154,5v0.154,7v0.154,9v0.076" << "2v0.308,3v0.154,4v0.154,6v0.154,8v0.154,9v0.076";
break;
default: //Unknown
qWarning("Downmixer: Unknown channel configuration!");
args << "channels" << "2";
break;
}
if(!startProcess(process, m_binary, args))
{
return false;
}
bool bTimeout = false;
bool bAborted = false;
QRegExp regExp("In:(\\d+)(\\.\\d+)*%");
while(process.state() != QProcess::NotRunning)
{
if(*abortFlag)
{
process.kill();
bAborted = true;
emit messageLogged("\nABORTED BY USER !!!");
break;
}
process.waitForReadyRead(m_processTimeoutInterval);
if(!process.bytesAvailable() && process.state() == QProcess::Running)
{
process.kill();
qWarning("SoX process timed out <-- killing!");
emit messageLogged("\nPROCESS TIMEOUT !!!");
bTimeout = true;
break;
}
while(process.bytesAvailable() > 0)
{
QByteArray line = process.readLine();
QString text = QString::fromUtf8(line.constData()).simplified();
if(regExp.lastIndexIn(text) >= 0)
{
bool ok = false;
int progress = regExp.cap(1).toInt(&ok);
if(ok) emit statusUpdated(progress);
}
else if(!text.isEmpty())
{
emit messageLogged(text);
}
}
}
process.waitForFinished();
if(process.state() != QProcess::NotRunning)
{
process.kill();
//.........这里部分代码省略.........