如何在QT下执行shell或外部程序(QT4)(shell)(mini6410)(smplayer)

来源:互联网 发布:moment.js日期相减 编辑:程序博客网 时间:2024/06/16 02:28

摘要:

    通常,我们运行shell程序都是在终端里进行的,而在产品中,不可能叫用户到终端里去敲命令吧;还有,当系统中的某一个计算功能,我在另一程序里已经做好了,想通过GUI程序直接调用它运行。那么,在这些情况下,如何通过GUI上的button来运行shell脚本和linux程序呢。下面将在mini6410上,通过一个范例来介绍如何在QT4 GUI程序里调用shell程序和运行应用程序。

     通过本范例,可以测试用linux C库的函数来调用shell脚本和应用程序,也可以通过qt的函数来调用shell脚本和应用程序。还介绍了阻塞运行和非阻塞运行。

介绍:

    范例简介:基于mini6410开发平台,用QT4设计一GUI界面HelloQt4,通过 HelloQt4界面上button->clicked来启动smplayer播放器。

    1、设计gui图形界面,创建一button,并在clicked下添加代码

   

    第一种方法(50行)是调用linux C函数库中的system(const char *string);

     第二 种方法(51行)和第三种方法 (53 54行)是调QT里的函数;

     需要说明的时,上面三种方法都是可以的,但前两种方法会阻塞进程,直到smplayer程序结束,而第三种方法则不会阻塞进程,可以多任务运行。

     还有,我们知道qt在运行的时候,要启动qws(qt windows server),如果用前面两种方法,则smplayer运行的时候,要新开启一个qws,否则不能运行;而用第三种方法,则不需要再开启qws,它和 HelloQt4共用一个qws,这样,在一个窗口里可以看到这两个程序。

    2、新建运行脚本,用来启动smplayer播放器

     在上一步中,qt程序执行了 /opt/run_smplayer脚本,但这个脚本是不存在的,我们要新建它,打开开发板的/opt目录,新建一个run_smplayer文件,添加如下内容

     

复制代码
#!/bin/sh#测试用#cd /opt/#rm qt_create/ -rf#sleep 3#mkdir qt_create#cd qt_create#mkdir qt_create1#cd qt_create1#mkdir qt_create2#cd qt_create2#mkdir ok#直接调用mplayer播放sdcard里的gq.avi文件#cd /usr/local/smplayer/bin#./mplayer /sdcard/gq.avi#启动友善的smplayercd /usr/local/smplayer/bin./smplayer
复制代码

   3、修改smplayer文件

    在友善的根文件系统中,/user/local/smplayer/bin目录中的smplayer脚本是有问题的,如果直接运行它,会出现鼠标和触摸屏不能使用的情况,我们要将/bin目录下的qt4脚本复制过来,并将最后三行改为

cd /usr/local/smplayer/
exec ./smplayer #-qws  
#hotplug

    其中qws注释掉。(前面提到过的,我们要多任务运行,不需要再开一个qws)    

   4、修改rcS文件,使之开机就运行 HelloQt4程序

    rcS文件如下:

复制代码
#! /bin/shPATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:runlevel=Sprevlevel=Numask 022export PATH runlevel prevlevel## Trap CTRL-C &c only in this shell so we can interrupt subprocesses.#trap ":" INT QUIT TSTP/bin/hostname Crt[ -e /proc/1 ] || /bin/mount -n -t proc none /proc[ -e /sys/class ] || /bin/mount -n -t sysfs none /sys[ -e /dev/tty ] || /bin/mount -t ramfs none /dev/bin/mount -n -t usbfs none /proc/bus/usbecho /sbin/mdev > /proc/sys/kernel/hotplug/sbin/mdev -s/bin/hotplug# mounting file system specified in /etc/fstabmkdir -p /dev/ptsmkdir -p /dev/shm/bin/mount -n -t devpts none /dev/pts -o mode=0622/bin/mount -n -t tmpfs tmpfs /dev/shm/bin/mount -n -t ramfs none /tmp/bin/mount -n -t ramfs none /varmkdir -p /var/emptymkdir -p /var/logmkdir -p /var/lockmkdir -p /var/runmkdir -p /var/tmp/sbin/hwclock -ssyslogd/etc/rc.d/init.d/netd startecho " " > /dev/tty1echo "Starting networking..." > /dev/tty1sleep 1/etc/rc.d/init.d/httpd startecho " " > /dev/tty1echo "Starting web server..." > /dev/tty1sleep 1/etc/rc.d/init.d/leds startecho " " > /dev/tty1echo "Starting leds service..." > /dev/tty1echo " "sleep 1echo " " > /dev/tty1/etc/rc.d/init.d/alsaconf startecho "Loading sound card config..." > /dev/tty1echo " "/sbin/ifconfig lo 127.0.0.1/etc/init.d/ifconfig-eth0#/bin/qt4 &#echo " " > /dev/tty1#echo "Starting Qt4 Applications, please waiting..." > /dev/tty1#/bin/smplayer &#echo " " > /dev/tty1#echo "Starting smplayer Applications, please waiting..." > /dev/tty1/bin/hello_qt4app &echo " " > /dev/tty1echo "Starting hello_qt4 Applications, please waiting..." > /dev/tty1#运行完hellp_qt4后,再运行smplayer#sleep 3#cd /usr/local/smplayer/bin/#exec ./smplayer
复制代码

    hello_qt4app脚本如下:

复制代码
#!/bin/shif [ -e /etc/friendlyarm-ts-input.conf ] ; then . /etc/friendlyarm-ts-input.conffitrue ${TSLIB_TSDEVICE:=/dev/touchscreen}TSLIB_CONFFILE=/etc/ts.confexport TSLIB_TSDEVICEexport TSLIB_CONFFILEexport TSLIB_PLUGINDIR=/usr/lib/tsexport TSLIB_CALIBFILE=/etc/pointercalexport QWS_DISPLAY=:1export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATHexport PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/usr/local/binif [ -c /dev/touchscreen ]; then export QWS_MOUSE_PROTO="Tslib MouseMan:/dev/input/mice" if [ ! -s /etc/pointercal ] ; then rm /etc/pointercal /usr/bin/ts_calibrate fielse export QWS_MOUSE_PROTO="MouseMan:/dev/input/mice"fiexport QWS_KEYBOARD=TTY:/dev/tty1export HOME=/rootcd /opt/crt_app/bin./hello_qt4 -qws hotplug
复制代码

    然后,重启开发板,hello_qt4程序运行了,再点button,播放器也弹出来了。

结语:

    本例程简单实用,介绍了函数的用途,没有对枯燥的代码进行深入的分析;对于入门者来说,这些内容应该会让它很容易就接受并应用起来,如果您是高手,更深入的还请自行分析。

参考资料:

QT下执行Shell或启动外部程序   http://wenku.baidu.com/view/33467002bed5b9f3f90f1c5b.html

QT下实现对Linux Shell调用的几种方法 QProcess AND QThread http://www.linuxidc.com/Linux/2010-08/28172.htm

原创粉丝点击