- 浏览: 238085 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
wahahachuang8:
GoEasy 实时推送支持IE6-IE11及大多数主流浏览器的 ...
服务器推送技术 java -
mahuanjian:
[flash=200,200][/flash]
服务器推送技术 java -
wenjundiandian:
下面有网页编辑器的话还是会被隐藏.
ext中消息框、提示框、确认框显示在最前面的解决方法 -
天塔上的猫:
/**
* JAVA常见的权限控制算法的实现
*
* ...
JAVA常见的权限控制算法的实现
摘要:
通常,我们运行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(qtwindows 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
#启动友善的smplayer
cd /usr/local/smplayer/bin
./smplayer
3、修改smplayer文件
在友善的根文件系统中,/user/lical/smplayer/bin目录中的smplayer脚本是有问题的,如果直接运行它,会出现鼠标和触摸屏不能使用的情况,我们要将/bin目录下的smplayer脚本复制过来,并将最后两行中的qws去掉。(前面提到过的,我们要多任务运行,不需要再开一个qws)
export HOME=/root
cd /usr/local/smplayer/
exe__c ./smplayer #-qws 1>/dev/null
2>/dev/null // 此处有屏蔽字,真实没有下划线
#hotplug
4、修改rcS文件,使之开机就运行HelloQt4i程序
rcS文件如下:
#!
/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:
runlevel=S
prevlevel=N
umask 022
export 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/usb
echo /sbin/mdev >
/proc/sys/kernel/hotplug
/sbin/mdev -s
/bin/hotplug
# mounting file system specified in
/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/lock
mkdir -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
sleep 1
/etc/rc.d/init.d/httpd start
echo "
"
>
/dev/tty1
echo "Starting web server..."
>
/dev/tty1
sleep 1
/etc/rc.d/init.d/leds start
echo "
"
>
/dev/tty1
echo "Starting leds service..."
>
/dev/tty1
echo "
"
sleep 1
echo "
"
>
/dev/tty1
/etc/rc.d/init.d/alsaconf start
echo "Loading sound card config..."
>
/dev/tty1
echo "
"
/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/tty1
echo "Starting hello_qt4 Applications, please waiting..."
>
/dev/tty1
hello_qt4app脚本如下:
#!/bin/sh
rm /root/.config/
-rf;
rm /root/.mplayer/
-rf;
if [ -e /etc/friendlyarm-ts-input.conf ] ; then
. /etc/friendlyarm-ts-input.conf
fi
true ${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=:1
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
export PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/usr/local/bin
if [ -c /dev/touchscreen ]; then
export QWS_MOUSE_PROTO="Tslib:${TSLIB_TSDEVICE} MouseMan:/dev/input/mice"
if [ -e /etc/pointercal -a !
-s /etc/pointercal ] ; then
rm /etc/pointercal
fi
else
export QWS_MOUSE_PROTO="MouseMan:/dev/input/mice"
>/etc/pointercal
fi
export QWS_KEYBOARD=TTY:/dev/tty1
export HOME=/root
cd /opt
./hello_qt4 -qws 1>/dev/null
2>/dev/null
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
来源:http://blog.sina.com.cn/s/blog_640531380100uh0a.html
发表评论
-
qtwebkit中js事件的正确写法。
2012-08-15 09:50 981<script language="JavaS ... -
qtwebkit截图
2012-08-13 13:29 805QSize size = m_view->page()- ... -
Qt 中一些常用类的中文说明
2012-02-22 23:39 1081作者:丁冬,华清远见嵌 ... -
输入法
2012-01-04 18:00 0http://civilnet.cn/syszux/syszu ... -
QT启动前有绿屏怎么处理
2012-01-04 09:49 1258笑看人生pual(13290889) 16:32:27QT启动 ... -
QT实现截取屏幕
2012-01-04 09:48 1199本文阐述了一个在Qtopia下截取屏幕的方法,实际上Qtopi ... -
在QT中通过摄像头动态显示图片 .
2012-01-04 09:49 1926Camgui::Camgui(QWidget *parent, ... -
脚本打包大量文件学习
2011-12-19 09:33 781TARGET_DIR=$PWDcd /list=`cat &l ... -
QT 同时支持鼠标和触摸屏
2011-12-17 12:36 1667现在 如果我要使用鼠标导入环境变量export QWS_M ... -
Qt中Qstring,char,int,QByteArray之间到转换
2011-12-17 12:31 1155各种数据类型的相互转换char * 与 const char ... -
QT Creator的style sheet的几种用法(QT Creator)(StyleSheet)(样式)(QT4.7)(用法)
2011-12-10 20:16 1864摘要: QT Create中,对butt ... -
QT学习笔记(QT4.7)(笔记)
2011-12-10 20:16 1907摘要: 由于 ... -
QT 4.7支持中文(QT4.7)(中文)(makeqpf)
2011-12-10 20:16 2054摘要: QT4.7.0在移植到开发板上的 ... -
QImage变暗
2011-12-16 14:50 1086_image = QPixmap::grabWindow ... -
Qt/Embedded动态旋转屏幕
2011-12-10 20:16 1115距离上次发博文已经有 ... -
linux嵌入式qt的屏幕旋转与字体大小问题
2011-12-16 14:50 2395【1、与qt程序显示文字大小有关的两项】 export ... -
改变QMessageBox的大小
2011-12-16 14:50 1014创建一个QMessageBox: QMessageBox m ... -
QT坐标变换
2011-12-09 09:18 1044------------------------------ ... -
QT画对话框窗口圆角
2011-12-09 09:16 1551QPainterPath path; QRectF rec ... -
QT工程中使用图片的三种方法
2011-12-09 09:03 1086图片是一种资源,而在Qt中,对于资源的使用是有其独特的方式的! ...
相关推荐
在C++编程中,Qt库提供了一种强大的方式来与操作系统进行交互,其中包括调用外部程序。`QProcess`类是Qt中用于执行外部应用程序的关键工具,它允许开发者在应用程序中启动、监控以及通信与外部进程。这篇博客文章将...
`pipe`和`popen()`是Linux系统调用,它们在shell工具中扮演着重要角色,特别是当需要在程序中执行外部命令时。 1. **pipe**:管道是一种数据结构,用于在进程间传递数据。在C语言中,`pipe()`函数用于创建一个管道...
通过QProcess类的start()方法我们可以在基于Qt的应用程序中启动外部Shell脚本,本demo的基本功能包含新增脚本、执行脚本、终止执行、删除脚本、打印输出以及保存脚本记录等。下载该demo后使用Qt Creator打开后可以...
`QProcess`是QT库中用于执行外部程序并与其交互的类,我们可以利用它来实现程序的注销和重启。首先,我们需要编写一个脚本(例如`restart.sh`)来执行注销和启动操作。在shell脚本中,注销当前进程可以使用`kill`...
分析和学习这些文件将有助于深入理解如何在Qt环境中整合和控制外部程序,尤其是对于那些初次接触此技术的开发者来说,这是一个宝贵的参考资料。 总的来说,"qt嵌入第三方应用实例"这个话题涵盖了许多关键的IT知识点...
在Windows系统中,按下Win+R快捷键会打开一个可以输入命令或程序路径的小窗口,执行相应的操作。这个项目旨在提供一个自定义的实现,用Qt的图形用户界面(GUI)模块来创建类似的功能。 Qt是一个跨平台的C++库,它为...
在ZynAddSubFX的构建和发布流程中,可能包含了使用Shell脚本来执行特定操作的环节,如编译、打包或者运行测试。 **项目结构与下载** "zynqt-master"这个文件名暗示了这是ZynAddSubFX项目的一个分支或版本,且重点...
这种编译方式使得Qt应用程序更加独立于外部库,增强了程序的移植性和可部署性。对于需要高度定制化的项目来说,这种方式是非常有用的。希望本篇文章能够帮助你顺利完成Qt的编译,并在后续的开发工作中得心应手。
Qt框架提供了QSerialPort模块,使得开发者可以方便地在应用程序中集成串口功能,包括打开、关闭串口,读写数据,以及设置通信参数等。 SSH则是一种网络协议,用于安全地远程登录到服务器,执行命令,传输文件等。它...
总之,通过Qt的多进程特性,我们可以轻松地集成外部应用程序,如mplayer,以实现更丰富的功能。这个示例不仅教会了我们如何使用Qt进行多进程编程,还展示了如何利用这一技术来播放网络电台,这对于多媒体应用开发者...
在软件开发过程中,经常需要判断一个外部程序是否启动完成。这在自动化测试、脚本执行、系统监控等场景下尤为重要。在Windows平台上,可以通过调用内核API来实现这一功能。下面详细介绍这些API的作用及使用方法,并...
从标签 "opencv vs qt dll exe打包" 可以看出,这个话题涉及如何将OpenCV、VS和Qt相关的DLL文件与最终的可执行文件(exe)一起打包,以便在没有完整开发环境的计算机上也能运行程序。这通常是在部署应用程序时需要...
QT库是一个跨平台的应用程序开发框架,支持多种操作系统,包括Windows、Linux、macOS等,因此FQTerm具备了在不同操作系统上运行的能力,满足开发者和用户在不同环境下的需求。 在C++编程语言中,QT库提供了一套丰富...
脚本.one文件可能包含了bat脚本的基础知识,如变量使用、条件语句(if、else)、循环(for、while)、函数定义以及如何调用外部程序或命令。理解bat脚本有助于提高工作效率,尤其是在定期执行重复任务时。 设计模式...
`QProcess`是Qt库中提供的一种工具,它使得在C++应用中执行外部程序、捕获其输出以及进行进程间通信变得方便。这个"Process启动进程完成交互并获取输出例程.zip"文件可能包含了关于如何使用`QProcess`类来实现这一...
在CLI中执行命令通常需要包括命令本身、选项(用于开启或关闭特定功能)和参数(指定命令作用的对象或提供数据)。命令、选项和参数之间需要使用空格隔开。在Linux中,命令运行时,系统会为其创建一个进程。内建命令...
导出 txt 文件, 用于输出在程序执行中的控制台操作日志。 原版下载:https://sourceforge.net/projects/tools4android/?source=directory The program allows you to install Android applications (extension : ....
而zhx0001.C可能包含了对命令行界面的操作,如读取用户输入或执行外部程序。对于初学者来说,分析和理解这些代码可以加深对C语言和操作系统接口的理解。 学习C语言时,了解并熟练运用这些接口是至关重要的。这不仅...