qt中如何啟動其他應用程序(如果不成功,還有許多原因即QProcess::ProcessError可供分析)


   類 QDesktopServices 提供的方法 訪問 常用的桌面 服務 , 如 瀏覽 器 、 播放器、 電子郵件客戶端 、 我們 使用 QDesktopServices :: openUrl(url) ,可以根據指定的url 打開Web 瀏覽 器 , 並返回 結果,如果 成功返回true ,否則 返回false。相應的可以打開文件(夾),可執行程序等!

    如果想要啟動其他應用程序使用QProcess, 當發生錯誤時,可以根據 指定 的 錯誤 描述 所發生 的錯誤類型 。

 

描述:在界面啟動后,可通過點擊按鈕啟動一個外部指定的程序!

myWidget::myWidget(QWidget *parent) :
 QWidget(parent)
{
  QPushButton *push_button  = new QPushButton(this);
  connect(push_button, SIGNAL(clicked()), this, SLOT(startProcess()));

  process = new QProcess();
  QObject::connect(process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(processError (QProcess::ProcessError)));
}

void myWidget::startProcess()
{
  process->start("E:\\a\\b.exe");
}

void myWidget::processError(QProcess::ProcessError error)
{
 switch(error)
 {
  case QProcess::FailedToStart:
    QMessageBox::information(0,"FailedToStart","FailedToStart");
    break;
  case QProcess::Crashed:
    QMessageBox::information(0,"Crashed","Crashed");
    break;
  case QProcess::Timedout:
    QMessageBox::information(0,"FailedToStart","FailedToStart");
    break;
  case QProcess::WriteError:
    QMessageBox::information(0,"Timedout","Timedout");
    break;
  case QProcess::ReadError:
    QMessageBox::information(0,"ReadError","ReadError");
    break;
  case QProcess::UnknownError:
    QMessageBox::information(0,"UnknownError","UnknownError");
    break;
  default:
    QMessageBox::information(0,"default","default");
    break;
 }
}

 

如上:在程序退出時,啟動的外部程序不會隨着主程序的退出而退出的,如果不希望這種情況發生。
可以在程序退出之前,添加如下代碼

if(process) 

{

  process->close();

  delete process;

  process = NULL;

}

http://blog.sina.com.cn/s/blog_a6fb6cc90101drvj.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM