• 12414阅读
  • 7回复

求教:用QT调用mplayer程序,如何将输出信息显示在终端上?先谢谢了!!! [复制链接]

上一主题 下一主题
离线linye09
 

只看楼主 倒序阅读 楼主  发表于: 2008-08-05
求教:用QT调用mplayer程序,如何将输出信息显示在终端上?先谢谢了!!!
— 本帖被 XChinux 执行加亮操作(2008-08-05) —
        我现在用QT4写一个简单的播放器界面,可以调用mplayer程序来播放音乐文件。但是我现在想把音乐文件的播放时间长度显示在界面上。通过调用setProcessChannelMode(QProcess::MergedChannels)后,再使用readyReadStandardOutput()信号,最后使用readAllStandardOutput()来获得信息。
可是当我使用qDebug()<<readAllStandardOutput();的语句,却输不出任何信息。这是怎么回事啊?我弄了4天都弄不出来。以下是部分代码:myprocess.cpp
Myprocess::Myprocess(QObject * parent) : QProcess(parent){
    myproc = new QProcess;
    //setProcessChannelMode(QProcess::MergedChannels);
    connect(myproc, SIGNAL(readyReadStandardOutput()), this, SLOT(readStdOut()) );

}

void Myprocess::readStdOut(){
    qDebug()<<readAllStandardOutput();
    genericRead( readAllStandardOutput() );
}
                                                        。
                                                        。
                                                  部分省略
                            。
                            。

bool Myprocess::play(QListWidgetItem *item){
    int i,row = listfile1->row(item);
    remaining_output.clear();
      QString executable ="mplayer";
      QStringList arguments;
    arguments.append("-identify");
    for(i=row;i<rowsfile1;i++)
        arguments.append(fileitems1);
    myproc->setProcessChannelMode(QProcess::MergedChannels);
    myproc->start(executable, arguments);

    if (!myproc->waitForStarted())
        return false;
    while (!myproc->waitForFinished(20))
            {   
            qApp->processEvents();
       
            }
   
    return EXIT_SUCCESS;

   
}


以上运行后,qDebug输出的结果是:
" "
" "
" "

都是这样的没有任何信息。我不知道我的代码里哪弄错了,我也参考了smplayer源码,我在smplayer源码里加上了qDebug()<<readAllStandardOutput()调试语句,可以输出很多的信息。可在自己的代码里却老是没有信息出来,真不知道是怎么回事?
我刚接触QT4才2个月,希望得到大家帮帮忙啊!老板催的急啊!
[ 此贴被linye09在2008-08-05 18:48重新编辑 ]
离线kwok924
只看该作者 1楼 发表于: 2008-08-06
我写了个小程序里面包含了系统函数system(),用来配置网卡的,如果在终端下运行可以显示配置的结果,如果直接点击程序而不是在终端下运行,则终端不会被开启。我想直接点击程序后终端会开启并显示配置信息,请问怎么做啊?谢谢
qt菜鸟
离线water_wf

只看该作者 2楼 发表于: 2008-08-06
查查qDebug怎么用的
离线linye09

只看该作者 3楼 发表于: 2008-08-06
引用第2楼water_wf于2008-08-06 15:06发表的  :
查查qDebug怎么用的


qDebug的用法没有错吧,我在smplayer里也是用同样的语句,都可以输出很多信息。还有我也有在其他的小程序用“qDebug()<<参数”类似的语句,也可以输出信息。用法应该没有错。我也用了:
    qDebug(" %s",readAllStandardOutput().data());
这样的语句也输不出任何信息。还请版主帮帮忙,先谢谢了。
离线water_wf

只看该作者 4楼 发表于: 2008-08-06
那就检查下mplayer输出信息了?首先能打到控制台上吗?
离线linye09

只看该作者 5楼 发表于: 2008-08-07
    water_wf ,非常谢谢你的关注!!!在QT方面我是个新手,还请多多帮忙。
  不好意思,我想我没说清楚,我上面的代码所做的就是将mplayer输出信息怎么能够打到控制台终端上?是不是我的代码有问题?
还有就是想问问:除了用进程类相关的函数,不知道有没有其他的方法来实现信息的输出?

kwok924 ,你好,我也遇到和你一样的问题,在终端下可以运行正常,但在点击图标程序却除了点问题,也没有找到解决办法,暂时我也帮不了你。
 
离线water_wf

只看该作者 6楼 发表于: 2008-08-07
我明白你的意思,我们先分析问题发生在那里
1: 你的程序根本没有输出,可以用printf(""),如果能打出来,说明有输出,在vc200*的环境下可以将printf换成 qDebug,在vc 的output 窗口会有输出
2:你没有收集到信息,这样的话各种办法都可以,进程通信,postevent都可以
离线gangmae
只看该作者 7楼 发表于: 2009-03-07
我已经加了-slave参数
快速回复
限100 字节
 
上一个 下一个