查看完整版本: [-- QProcess打不开外部应用程序怎么办?求指导 --]

QTCN开发网 -> Qt基础编程 -> QProcess打不开外部应用程序怎么办?求指导 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

lijianglong 2014-11-11 17:24

QProcess打不开外部应用程序怎么办?求指导

我想编个程序,启动qq音乐播放器,但是始终没有成功,该怎么办呢?求指导!
  1. #ifndef MYWIDGET_H
    #define MYWIDGET_H

    #include <QWidget>
    #include <QProcess>
    #include <QPushButton>
    #include <QMessageBox>
    class myWidget : public QWidget
    {
        Q_OBJECT
    public:
        //explicit myWidget(QWidget *parent = 0);
        myWidget(QWidget *parent = 0);
    signals:

    public slots:
        void startProcess();
        void processError(QProcess::ProcessError error);
    private:
        QProcess *process;
        QPushButton *push_button;
    };

    #endif // MYWIDGET_H

下面是cpp文件
  1. #include "mywidget.h"

    myWidget::myWidget(QWidget *parent) :
        QWidget(parent)
    {
        QPushButton *push_button  = new QPushButton("启动",this);
          QObject::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("D:\\Program Files\\Tencent\\QQMusic\\1123.2014.10.14.20.49.28\\QQMusic.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;
    }
    }

下面是运行的显示界面:[attachment=12818][attachment=12817]

ashe0817 2014-11-11 17:56
因为你的路径中有空格,改下面这样就行了。

QProcess::execute("\"D:\\Program Files\\Tencent\\QQMusic\\1123.2014.10.14.20.49.28\\QQMusic.exe\"");

lijianglong 2014-11-11 18:45
ashe0817:因为你的路径中有空格,改下面这样就行了。
QProcess::execute("\"D:\\Program Files\\Tencent\\QQMusic\\1123.2014.10.14.20.49.28\\QQMusic.exe\""); (2014-11-11 17:56) 

谢谢你的帮助,问题解决!!!QQ音乐播放器顺利打开了,但是我想更深入的问一下,它现在打开了但不是播放状态,是否可以使其打开后自动播放音乐呢?

xhybb 2014-11-11 21:25
lijianglong:谢谢你的帮助,问题解决!!![表情]QQ音乐播放器顺利打开了,但是我想更深入的问一下,它现在打开了但不是播放状态,是否可以使其打开后自动播放音乐呢? (2014-11-11 18:45) 

播放器里面可以设置的

lijianglong 2014-11-11 21:36
xhybb:播放器里面可以设置的 (2014-11-11 21:25) 

额。。。不是说的在QQ音乐播放器界面上设置吧,我是希望在我自己编的程序中怎么把QQ音乐播放器打开,并在我的程序中设置好它的音量,播放模式【单曲循环等】,并使其自动开始播放,这样就可以不用在打开的QQ音乐播放器上手动设置了,不知道QProcess可以实现不可以,求大神指导!!

toby520 2014-11-12 09:09
哈哈,楼主 你好可爱啊,这个功能 你要看下QQ音乐播放器 是否提供了入口参数,不然无能为力吧
比如:"C:\Program Files (x86)\kingsoft\kingsoft antivirus\kwtpanel.exe" /weatherpanel /src:11 可以传递参数 或者可以做到

lijianglong 2014-11-12 10:49
toby520:哈哈,楼主 你好可爱啊,这个功能 你要看下QQ音乐播放器 是否提供了入口参数,不然无能为力吧
比如:"C:\Program Files (x86)\kingsoft\kingsoft antivirus\kwtpanel.exe" /weatherpanel /src:11 可以传递参数 或者可以做到 (2014-11-12 09:09) 

我是个大菜鸟,对这个是真的不懂!那我该怎么知道QQ音乐播放器是否提供了入口参数呢?还有你下面的【"C:\Program Files (x86)\kingsoft\kingsoft antivirus\kwtpanel.exe" /weatherpanel /src:11 可以传递参数 或者可以做到】是什么意思呢?

dbzhang800 2014-11-12 10:58
关于QProcess的一些概念,看这个吧 http://blog.csdn.net/dbzhang800/article/details/6876451

至于 QQ音乐播放器 有没有提供命令行接口 或其他IPC接口,你需要咨询腾讯。

toby520 2014-11-12 14:21
楼主可以拿qq播放器在cmd下 help一下 看看有命令行输出帮助不

toby520 2014-11-12 14:25
刚刚看了下 好像没有传入参数的可能

dbzhang800 2014-11-12 14:37
toby520:刚刚看了下 好像没有传入参数的可能 (2014-11-12 14:25) 

对于一个Windows下的程序来说,链接时 可以选 console子系统还是windows子系统 (和程序带不带界面无关)。

一般GUI程序,链接都是windows子系统,它的标准输入\标准输出\标准出错 这几个流都没有依附到控制台上。即使程序有 prinf() 等语句,也是看不到的输出。

lijianglong 2014-11-12 20:20
toby520:
刚刚看了下 好像没有传入参数的可能

请问你说的“可以拿qq播放器在cmd下 help一下 看看有命令行输出帮助不”是指的这样吗?
[attachment=12826]

lijianglong 2014-11-12 20:22
toby520:刚刚看了下 好像没有传入参数的可能 (2014-11-12 14:25) 

不知道该怎么help.......

dbzhang800 2014-11-12 21:56
lijianglong:不知道该怎么help.......[表情] (2014-11-12 20:22) 

多看看其他的回复。

我前面提了,对于这种程序(链接到windows子系统的程序),你在控制台下运行,是什么信息都得不到的。因为它的标准输出,标准出错 都没关联到到控制台上。 进一步讲,这种程序通常内部都压根不用prinf()等标准输出函数的。


lijianglong 2014-11-12 22:05
谢谢大神指导!!我感觉你说的对!但是我真不懂!!!还是谢谢大神!但是我还是不知道该怎么办。。。


查看完整版本: [-- QProcess打不开外部应用程序怎么办?求指导 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled