摘要:

通常,我们运行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

#sleep3#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

#启动友善的smplayer

cd/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/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:

runlevel=S

prevlevel=N

umask022export PATH runlevel prevlevel

#

# Trap CTRL-C&c onlyinthisshell 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/usb

echo/sbin/mdev>/proc/sys/kernel/hotplug/sbin/mdev-s/bin/hotplug

# mounting file system specifiedin/etc/fstab

mkdir-p/dev/pts

mkdir-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/var

mkdir-p/var/empty

mkdir-p/var/log

mkdir-p/var/lockmkdir-p/var/run

mkdir-p/var/tmp/sbin/hwclock-s

syslogd/etc/rc.d/init.d/netd start

echo"">/dev/tty1

echo"Starting networking...">/dev/tty1

sleep1/etc/rc.d/init.d/httpd start

echo"">/dev/tty1

echo"Starting web server...">/dev/tty1

sleep1/etc/rc.d/init.d/leds start

echo"">/dev/tty1

echo"Starting leds service...">/dev/tty1

echo""sleep1echo"">/dev/tty1/etc/rc.d/init.d/alsaconf start

echo"Loading sound card config...">/dev/tty1

echo""/sbin/ifconfig lo127.0.0.1/etc/init.d/ifconfig-eth0

#/bin/qt4echo"">/dev/tty1

#echo"Starting Qt4 Applications, please waiting...">/dev/tty1

#/bin/smplayerecho"">/dev/tty1

#echo"Starting smplayer Applications, please waiting...">/dev/tty1/bin/hello_qt4app&echo"">/dev/tty1

echo"Starting hello_qt4 Applications, please waiting...">/dev/tty1

#运行完hellp_qt4后,再运行smplayer

#sleep3#cd/usr/local/smplayer/bin/#exec ./smplayer

hello_qt4app脚本如下:

#!/bin/shif[-e/etc/friendlyarm-ts-input.conf ] ; then

./etc/friendlyarm-ts-input.conf

fitrue${TSLIB_TSDEVICE:=/dev/touchscreen}

TSLIB_CONFFILE=/etc/ts.conf

export TSLIB_TSDEVICE

export TSLIB_CONFFILE

export TSLIB_PLUGINDIR=/usr/lib/ts

export TSLIB_CALIBFILE=/etc/pointercal

export QWS_DISPLAY=:1export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

export 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

fielseexport QWS_MOUSE_PROTO="MouseMan:/dev/input/mice"fi

export QWS_KEYBOARD=TTY:/dev/tty1

export HOME=/root

cd/opt/crt_app/bin

./hello_qt4-qws

hotplug

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

结语:

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

参考资料:

shell 执行qt生成文件_(原创)如何在QT下执行shell或外部程序(QT4)(shell)(mini6410)(smplayer)...相关推荐

  1. python打开文件_喜大普奔 | 如何在Win10下利用Python打开grib文件

    为什么要花差不多半个月来研究这个,明明Linux比这个简单多了-- 窃格瓦拉·瓶:学Linux是不可能学Linux的,这辈子都不可能喜欢命令行的,Win10说话又好听,我偷别人代码养你啊(?) 总之就 ...

  2. qt 移动文件夹到另一目录下

    qt 移动文件夹到另一目录下 #include <QDir>//删除文件夹 bool delDir(const QString &path) {if (path.isEmpty() ...

  3. node.js 生成文件_如何使用Node.js在几秒钟内生成模拟数据

    node.js 生成文件 介绍 (Introduction) In most of the applications, you need to have some static JSON data w ...

  4. sftp shell 批量上传文件_如何在shell脚本里使用sftp批量传送文件-阿里云开发者社区...

    主要步骤如下: 1.为运行shell脚本的本地用户生成密钥对 2.将其中的公钥分发到sftp欲登录的远程服务器上 3.编写并以上面的本地用户运行shell脚本 一.生成密钥对 在shell脚本中使用s ...

  5. deepin系统15.6版本安装执行那个exe文件_秒杀一众PE系统,制作强大的U盘启动系统,自制新一代装机神器

    安装电脑系统的方式有很多,是一个既复杂又简单的工作,有时候几分钟就可以装好,而有些时候却要折腾几个小时. 重装系统的时候有很大一部分原因就是因为系统损坏,无法正常进入系统才选择的重装,就拿以前安装原版 ...

  6. 如何在 Linux 下执行 bin 文件

    什么是 .bin 文件? .bin 文件是在 Linux 和类 Unix 操作系统上的自执行文件.在执行 .bin 文件之前,你需要给它执行权限.这可以通过命令行或者 gui 完成. chmod +x ...

  7. 如何在通达信软件上随意画图_[原创]谁能修改下画图工具啊?

    共11 条记录, 每页显示 10 条, 页签: [1] [2] 标题:[原创]谁能修改下画图工具啊? 1楼 xxx3345 发表于:2013/11/8 17:54:00 1,我对通达信画图工具的要求是 ...

  8. python中换行符怎么写_语法 - 如何在Python中执行换行符(换行符)?

    语法 - 如何在Python中执行换行符(换行符)? 我有一长串代码,我希望在多行之间分解. 我使用什么,语法是什么? 例如,添加一串字符串, e = 'a' + 'b' + 'c' + 'd' 并将 ...

  9. linux下Qt编写串口调试助手,如何在linux下用QT写一个简单的串口调试助手

    如何在linux下用QT写一个简单的串口调试助手 QT5串口类 在QT5以前,编写串口一般使用的是qextserialport类,但在QT5之后有了QT自带的串口类SerialPort(串口基础类)和 ...

  10. python如何生成excel文件_[原创] 如何用python3自动随机生成Excel文件内容

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 首先来看效果图 文件命名 文件内容 代码说明如下 import xlrd import xlwt from my_framework.log import ...

最新文章

  1. 各种 Optimizer 梯度下降优化算法总结
  2. EJB-Java服务器端构件模型使用入门(2)
  3. 【分布式事务系列九】聊聊分布式事务
  4. linux删除libc.so.6
  5. 我眼中的各种编程语言
  6. Java集合(3)--Iterator迭代器
  7. 浅谈iptables防SYN Flood攻击和CC攻击
  8. 2016下半年网络规划设计师考试上午真题
  9. turtle模块还能这样玩?(一条条金龙鱼、雨景)
  10. git提交后的代码在哪儿_git 分支合并策略
  11. 深度解密换脸应用Deepfake
  12. 计算机房设计规范2008,GB50174-2008 电子计算机机房设计规范
  13. 慢性病管理系统/案列/APP/小程序/网站
  14. 个人博客定制 to 鼠标单击事件绑定
  15. 对称密钥交换协议——实现在不安全的信道安全地传输密钥
  16. DIY LDAC蓝牙接收器(二)硬件调试篇
  17. 猪齿鱼 SaaS 版效能平台发布
  18. 树形动态规划之树的最大独立集
  19. 计算广告4——用户增长
  20. C++ 函数调用过程中栈区的变化——(栈帧、esp、ebp)

热门文章

  1. python数字转英文_GitHub - Ailln/en2an: 快速转化「英文数字」和「阿拉伯数字」
  2. vs code的php格式化
  3. tp房产源码tpfangchan-fangcms-tphouse火车头采集软件方法
  4. Tomcat 服务器搭建
  5. 批济南某创华宇培训学校
  6. 增大图像感受野方法的总结
  7. python面向对象oo是什么意思_python进阶:面向对象是什么意思?
  8. QQ空间FLASH代码及其使用方法
  9. 小牛叔讲Python第11章:函数的高级用法以及匿名函数
  10. B站banner图片随鼠标移动虚化效果摸索