2016-04-13 12 views
3

Ben komutlarını kullanmak istiyorum:Qt uygulamasında terminal komutuyla ayrılmış bir uygulama nasıl çalıştırılır?

cd /opencv/opencv-3.0.0-alpha/samples/cpp/ 
./cpp-example-facedetect lena.jpg 

Qt uygulaması düğmeye tıklandığında() yöntemine OpenCV bir örnek kod çalıştırmasına. Yani kullanın: Gerekli kütüphane eklendi

void MainWindow::on_btSample_clicked() 
{ 
     QProcess process1; 
     QProcess process2; 

     process1.setStandardOutputProcess(&process2); 

     process1.start("cd /opencv/opencv-3.0.0-alpha/samples/cpp"); 
     process1.waitForBytesWritten(); 
     process2.start("./cpp-example-facedetect lena.jpg"); 
} 

kullanmak. Ama başvurumu yürüttüğümde bir hatam var.

QProcess: Destroyed while process ("./cpp-example-facedetect") is still running. 

Nasıl düzeltebilirim? Yaptığım yol doğru değilse, başka bir yolla bana ver. Şimdiden teşekkür ederim!

Öncelikle senin QProcess process2 muhtemelen (yani kapsam onun dışarı beri tahrip olur) tamamlanmadan önce kapsam dışında gidiyor

:

+1

process2.waitForFinished() ile deneyin; – Marco

+0

@Marco bunu denedim ama hiçbir şeyim yok, ekranda bir hata ve sonuç yok. –

cevap

3

Buraya iki konuyu var. Bunu bitirmek için waitForFinished() kullanarak (bekleyin veya (kapsamını değiştirmek için) bunu bir işaretçi veya üye değişkeni yapıp) düzenli yapabileceğimiz hangi (bazı elleçleme yuvaya finished() sinyalini bağlamak zorunda ya.

Burada başka bir şey var, sadece çalışma dizinini ayarlamak istediğiniz gibi görünüyor, bu yüzden cd komutunu çalıştırılabilir dosyaya aktarmayı düşünmüyorum, böyle bir şey yapmak daha kolay olurdu:

EDIT

Çıktının nasıl alınacağını göstermek için örneğimi düzenledim:

QProcess myProc; 

qDebug() << "Starting process\n"; 
// Setup the working directory 
QDir::setCurrent("D:\\software\\qtTest"); 

// Start the process (uses new working dir) 
myProc.start("test.bat"); 

myProc.waitForFinished(); 
qDebug() << myProc.readAll(); 

Bu pencereyi yaklaşık 2 dakika içinde kaldırdım ve sizin için test ettim ... Linux üzerinde yapabilirdim ama bu beni biraz daha uzun sürecek çünkü önyükleme yapmak zorundayım: o. .. ama istersen yapacağım.

DÜZENLEME 2

tamamen sürecini ayırmak isterseniz:

Şimdi
QProcess myProc; 

qDebug() << "Starting process\n"; 
// Setup the working directory 
QDir::setCurrent("D:\\software\\qtTest"); 

// Start the process (uses new working dir) 
myProc.startDetached("test.bat"); 

zaman ... o şimdi geri süreçten çıktı alabilirsiniz emin% 100 değilim Qt uygulamanızla ilgisi yok ...

+0

Bunu denedim ama hiçbir şeyim yok, ekranda hata yok ve sonuç yok. Çalıştırmak için başka bir yol var mı? Teşekkürler. –

+0

Örneğimi düzenledim ... Sanırım sizin için çalışıyor, ancak çıktı almıyorsunuz diye bir şey görmüyorsunuz ... ... bu yüzden waitForFinished() kullanın ve sonra çıkışı kullanarak oku readAll() '. Eğer bu uzun bir süreçse, muhtemelen farklı bir şekilde ayarlamalısınız ve readReady() sinyali için bekleyiniz ve çıktıyı tekrar gelene kadar tekrar giriniz. Bu örneğe ihtiyacınız varsa, bunu yazmak için daha uzun sürer. –

+0

Çok teşekkürler. Örnek kod bir pencere öğesi uygulaması olarak çalışır, bir resim gösterir, ancak benim durumumda gerekli bilgiyi almam gerektiğini bilmiyorum. İhtiyacım olan sadece onu çalıştırmak ve sonucunu umursamıyor: D. –

İlgili konular