• 6268阅读
  • 7回复

关于QT4中用按钮激活应用程序的问题 [复制链接]

上一主题 下一主题
离线liuyi
 
只看楼主 倒序阅读 楼主  发表于: 2008-05-06
— 本帖被 XChinux 执行加亮操作(2008-05-07) —
    本人刚刚因为需要接触QT,目前所使用的QT4,很多地方不明白,现有的资料也不是很齐全,希望能在这里和大家一起交流进步.


    首先我用界面设计师随意的做了一个名为"play"的QPushButton按钮,并且将其导入到了qmake工程中,现在我需要进行相关的编译使这个按钮能够激活mplay播放器,希望大家能够指点一下。
  设该播放器有 mplay.exe 文件的话,要如何编程来激活呢?
 
  另外如果我将一些音频文件放入/home/music/下,怎么才能在激活播放器的同时用该播放器播放音频文件呢?
离线giscn
只看该作者 1楼 发表于: 2008-05-07
mplay我没用过,但大概有几种方案
1. qprocess作为独立进程调用,如果mplay支持带音频文件名(或音频列表文件名)参数,则完美
2. 如果有源码,可以在代码级别上的call 相关的函数
3. 如果有COM, activex或者有公开的api,qlibrary, qt activex server等可以帮助你
4. 最差的情况,win hook到启动的mplay图形界面,稍为复杂
5. 还有其它情况吗?
http://nzt.spaces.live.com
离线liuyi
只看该作者 2楼 发表于: 2008-05-07
首先感谢楼上的朋友
  我现在的思路是这样的:
    因为已经在原有的界面上尝试着做出了一个简单的查询功能,即输入文件名,如lovely ,可以查找出文件的路径,如/home/music/lovely.mp3,  并且可以在qtable widget表窗口部件中的“文件名称“列中显示出home/music/lovely.mp3,我在想是否可以在用按钮激活播放器的同时也通过路径来选取播放这个文件。 (p.s:所有的文件可以都保存在/home/music/中)。也就是“按钮--->激活mplay.exe and 执行/home/music/lovely.mp3”这种形式,另外如果我将mplay设置为默认播放器的话,应该就不用刻意先激活播放器吧,直接执行该音频文件也行吧。
    希望有思路的朋友能给一段代码让我参考一下。谢谢。
   
本帖被 XChinux 执行加亮操作(2008-05-07),谢谢斑竹。
   
离线liuyi
只看该作者 3楼 发表于: 2008-05-07
我目前对qt的编码语言还很不熟悉,因此仅仅有个思路却不知如何实现,希望有高手不吝赐教。
现在拿了本书在学习中,如果能自己解决这个问题的话,我会把相关代码发布出来的,和大家一起交流。
离线giscn
只看该作者 4楼 发表于: 2008-05-07
引用第2楼liuyi于2008-05-07 12:51发表的  :
首先感谢楼上的朋友
  我现在的思路是这样的:
    因为已经在原有的界面上尝试着做出了一个简单的查询功能,即输入文件名,如lovely ,可以查找出文件的路径,如/home/music/lovely.mp3,  并且可以在qtable widget表窗口部件中的“文件名称“列中显示出home/music/lovely.mp3,我在想是否可以在用按钮激活播放器的同时也通过路径来选取播放这个文件。 (p.s:所有的文件可以都保存在/home/music/中)。也就是“按钮--->激活mplay.exe and 执行/home/music/lovely.mp3”这种形式,另外如果我将mplay设置为默认播放器的话,应该就不用刻意先激活播放器吧,直接执行该音频文件也行吧。
    希望有思路的朋友能给一段代码让我参考一下。谢谢。
   
.......


mplay支持命令行方式允许带文件名为参数的话 就可以
http://nzt.spaces.live.com
离线liuyi
只看该作者 5楼 发表于: 2008-05-08
mplay支持命令行方式允许带文件名为参数的话 就可以[/quote]
离线liuyi
只看该作者 6楼 发表于: 2008-05-08
允许参数带文件名。
请问相关代码如何编写呢?
离线liuyi
只看该作者 7楼 发表于: 2008-05-09
QProcess类允许运行外部程序并与其通讯。该类异步工作,在后台完成相应的工作来保证UI对用户操作的正常响应,在外部程序终止或有数据产生时emit signal来通知本程序。
   
    QProcess::start()用于传递必要的参数,并启动外部程序。
   
    静态函数QProcess::execute()会运行一个外部程序并在外部程序结束之前保持阻塞状态。
   
    QTemporaryFile::open()在无参数时以读写模式打开文件。
    QTemporaryFile在对象生存期结束时会自动删除临时文件。
   
    当QProcess以同步模式使用时,不需要建立signal-slot连接。
   
    如果需要比静态函数execute()精度更高的控制,可以改用下面的方法:
   
    首先创建一个QProcess对象,然后对其调用start(),之后调用QProcess::waitForStarted()强制进入阻塞状态,直至外部程序顺利启动为止,之后再调用QProcess::waitForFinished(),阻塞直至外部程序结束为止。
快速回复
限100 字节
 
上一个 下一个