精华内容
下载资源
问答
  • 关于LinuxQt执行shell命令

    千次阅读 2017-06-14 13:40:33
    前几天转载了一篇关于Linux执行shell命令的文章。 我的运行环境为Qt4.8.6+Qt Creator2.7.0,运行程序(执行shell命令的程序)提示 Cannot read creator env file /tmp/**** 错误,经查询,是Qt2.7.0的bug,升...
    前几天转载了一篇关于Linux下执行shell命令的文章。
    我的运行环境为Qt4.8.6+Qt Creator2.7.0,运行程序(执行shell命令的程序)提示
    Cannot read creator env file /tmp/****
    错误,经查询,是Qt2.7.0的bug,升2.7.1后,有时正常,有时报错,升2.7.2后正常。

    另外,我需要执行的命令涉及到输出重定向,文章里介绍的三种方法, 使用QProcess的start()函数,和execute()函数,程序可以运行,但是输出重定向失败,只有system()函数重定向成功。
    展开全文
  • void audiotest::on_pBtn_left_clicked() { ui->pBtn_left->setEnabled(false); // proc_left->start("mplayer /diskE/audiotest/left.mp3 -af volume=15"); //mp3的地址为绝对地址 ...

    void audiotest::on_pBtn_left_clicked()
    {
        ui->pBtn_left->setEnabled(false);
    
    //    proc_left->start("mplayer /diskE/audiotest/left.mp3 -af volume=15");  //mp3的地址为绝对地址
    //    proc_left->start("firefox");  //ok
        proc_left->start("sh "+ QCoreApplication::applicationDirPath() + "/mp3left.sh");
    //    qDebug() << QCoreApplication::applicationDirPath();
    //    QMessageBox::about(this,"About",QCoreApplication::applicationDirPath());
    //    QProcess::execute("mplayer ./left.mp3 -af volume=15");
        if(proc_left->waitForFinished()){  //等待进程结束  进程结束前一直阻塞
        ui->pBtn_left->setEnabled(true);
        }
    
    //    ui->pBtn_left->setEnabled(true);
    }
    
    void audiotest::on_pBtn_right_clicked()
    {
        ui->pBtn_right->setEnabled(false);
    //    proc_right->start("mplayer /diskE/audiotest/right.mp3 -af volume=15");
        proc_right->start("sh "+ QCoreApplication::applicationDirPath() +"/mp3right.sh" );
        if(proc_right->waitForFinished()){   //等待进程结束  进程结束前一直阻塞
            ui->pBtn_right->setEnabled(true);
        }
    //    ui->pBtn_right->setEnabled(true);
    }
    
    void audiotest::on_pBtn_mix_clicked()
    {
        ui->pBtn_mix->setEnabled(false);
    //    proc_mix->start("mplayer /diskE/audiotest/mix.mp3 -af volume=15");
        proc_mix->start("sh "+ QCoreApplication::applicationDirPath() +"/mp3mix.sh");
    //    ui->pBtn_mix->setEnabled(true);
        if(proc_mix->waitForFinished()){   //等待进程结束  进程结束前一直阻塞
            ui->pBtn_mix->setEnabled(true);
        }
    }

    这个代码waitForFinished()阻塞还有点问题,下一栏是我完美改进后的

    https://blog.csdn.net/rong11417/article/details/102487388

     

    展开全文
  • Qt下编码调用LinuxShell脚本命令

    千次阅读 2019-03-21 17:20:55
    调用Shell脚本命令Qt环境下常用两种方式: 1)使用QProcess开启一个进程,把脚本命令作为参数传递进去。 2)使用Linux系统函数。 不推荐使用系统函数,一是复杂度比较高;二是常常会阻塞进程;三是控制和数据交互...

    引言

    Linux下编写Qt程序,常会碰到需要执行Shell脚本命令的时候。因为简单调用的一个脚本命令,可以大大简化功能实现的复杂度。
    调用Shell脚本命令,Qt环境下常用两种方式:
    1)使用QProcess开启一个进程,把脚本命令作为参数传递进去。
    2)使用Linux系统函数。
    不推荐使用系统函数,一是复杂度比较高;二是常常会阻塞进程;三是控制和数据交互不方便。所以本文以下内容都是讲述使用QProcess调用脚本命令的方法。

    单条指令调用

    用QProcess执行单条脚本指令的代码真的非常简洁,但要理解清楚,应至少掌握三点内容:阻塞与非阻塞、进程与线程、QProcess参数传递。
    一、阻塞与非阻塞
    但凡熟悉QProcess类的读者应该清楚,QProcess调用外部进程分为阻塞和非阻塞两类方式。

    1)QProcess::execute("xxx"); //阻塞方式
    2)QProcess process;
       process.start("xxx"); //非阻塞方式
    

    阻塞方式下,新开启的QProcess不执行完毕或中途退出,主进程就会一直等待,卡在那里而不做任何处理。
    而在非阻塞方式下,新开启的QProcess不会影响主进程中其它线程的运行。

    二、进程与线程
    进程比较好理解,一个应用程序就是一个进程,对应控制面板显示的内容。
    一个进程可以开启多个线程,通常在一个单独开启的线程中调用QProcess来开启一个新的进程,这样可以最大程度的使新开启的进程不影响主进程中的其它线程(包括主线程)。

    三、QProcess参数传递
    这里主要还是QProcess的用法。大致分为三步:1)生成一个进程;2)设置环境变量、运行参数;3)启动进程,等待执行。

    一个调用QProcess执行压缩文件的例子如下:

    bool SysResource::compressDir(const QString srcPath, const QString workPath, const QString zipfile)
    {
    	QProcess process; //生成进程
    	//设置环境变量、运行参数
    	process.setWorkingDirectory(workPath);
    	QStringList args;
    	args << "-mr" << zipfile << srcPath;
    	//启动进程,等待执行
    	process.start("zip", args);
    	if (!process.waitForFinished())
    	{
    		process.close();
    		return false;
    	}
    	process.close();
    	return true;
    }
    

    为了不阻塞当前调用的线程,需要把这个函数放在一个线程中。Qt下把函数放在线程的方法如下:

    QtConcurrent::run(this, &SysResource::Fuctionname);
    

    多条指令的调用

    多条指令调用有两种方法,一是用一个循环,等前一条指令执行完,发出finished()信号后执行下一条;二是把多条指令写在一个Shell Script中,调用这个脚本即可。这里强烈推荐使用第二种方法,因为QProcess无法识别Linux的管道命令等多种命令,而第二种方法完美规避这个问题。可以在QProcess启动后,使用qDebug()显示QProcess.arguments()和QProcess.errorString()来判断指令是否被QProcess识别正确。
    1)循环执行指令代码demo如下:

    //构造函数中
    QProcess *process = new QProcess;
    connect(process, SIGNAL(finished(int)), this, SLOT(doNextCommand()));
    
    //槽函数
    void SysResource::doNextCommand()
    {
    	ipRank++;
    	if (ipRank < 4)  //定义了Command[4]数组存放了4条指令
    	{
    		process->start(Command[ipRank]);
    	}
    	else
    	{
    		process->close();
    	}
    }
    

    2)调用外部脚本代码和单条指令类似,如下:

    QProcess process;
    QStringList args;
    args << "/home/LM/xxx.sh";
    process.start("sh", args);
    if (!process.waitForFinished())
    {
    	process.close();
    	return;
    }
    process.close();
    

    总结

    文中几种方法都是从编写的工程文件中节选而来,在发行版和ARM版的Linux系统中都得到了验证。欢迎和我交流讨论~

    展开全文
  • LinuxQT执行shell命令

    千次阅读 2015-09-21 23:41:58
    LinuxQT执行shell命令

    http://my.oschina.net/floristgao/blog/303768


    当需要在QT中执行shell命令时可以利用以下方法:

    (1)首先包含头文件:

    #include <QProcess>

    (2)执行shell命令:

    QProcess::execute("ls");

    /

    #include  <QProcess>

    void Widget:on_pushButton_clicked()

    {

    //*

     system("ls");//调用LINUX C函数库中的system(const char *string);

    *//

    #######@@@@@

    QProcess ::execute("ls");//调用QT里的函数

    @@@@@############

    ----------------------

    QProcess *proc = new QProcess;

    proc->start("ls");

    ---------------------------

    Tip:以上三种方法都可以,但前两种方法会阻塞进程,知道ls程序结束,

    而第三种则不会阻塞进程,可以多任务运行。



    展开全文
  • 当需要在QT执行shell命令时可以利用以下方法: (1)首先包含头文件: #include <QProcess> (2)执行shell命令: QProcess::execute("ls"); ///////////////////// #include <QProcess> void ...
  • linux-qt中,如果想要调用shell语句,可以使用以下三种方式: 1. QProcess::execute(" ") 使用前需要添加头文件 #include <QProcess> `内联代码片`。 // An highlighted block #include <QWidget> #...
  • Qtlinux系统中执行shell命令

    千次阅读 2018-10-12 12:32:15
    linux系统下,Qt执行shell命令的方式有3种: (1)QProcess:execute("ls"); (2)system("ls"); (3)QProcess *process = new QProcess(); process-&gt;start("ls"); 注1...
  • #include <QCoreApplication>#include <QDebug>#include <QTextStream>#include <QDir>#include <QFile>#include <QList>#include <QThread>...QtNetwork...
  • Linux+Qt使用shell

    2020-01-17 14:40:55
    第一种方法(50行)是调用linux C函数库中的system(const char *string);debug显示执行结果 第二 种方法(51行)和第三种方法 (53 54行)是调QT里的函数; debug不显示执行结果 需要说明的时,上面三种方法都是可以...
  • QT 启动shell脚本

    2018-07-16 15:22:00
    1、QProcess *p = new QProcess(this); 2、QString str = qApp->applicationDirPath() ...//这是我的shell脚本的目录 3、if(p->startDetached(str)) {  qDebug() << "success"; }else {  qDebu...
  • linux下新建一个print hello world的脚本程序,如下所示:~/boke---> vim hello.sh ~/boke---> cat hello.sh #!/bin/bash #!this is hello script echo 'hello, I am yLiu'先来查看hello.sh的文件属性,如下所示:~/...
  • 有些误解认为 shell 脚本仅用于 CLI 环境。实际上在 KDE 或 Gnome 桌面下,你可以有效的使用各种工具编写 ...利用下面的工具,你可以构建强壮的、可交互的、对用户友好的 UNIX/Linux bash 脚本。制作 GUI 应用不是...
  • Linux中的shell脚本

    2018-10-16 10:45:45
    1.shell脚本入门 1.1定义 [root@hadoop000 shell]# vi wordcount.sh #!/bin/bash echo “www.ruozedata.com” [root@hadoop000 shell]# /opt/shell/wordcount.sh -bash: /opt/shell/wordcount.sh: Permission ...
  • QT 调用执行 linux脚本的三种方法

    千次阅读 2018-10-16 13:51:20
    linux系统下,Qt执行shell命令的方式有3种: (1)QProcess:execute("ls"); (2)system("ls"); (3)QProcess *process = new QProcess(); process-&gt;start("ls"); 注1...
  • linux qt 调用python简单例子

    千次阅读 2018-11-08 10:50:52
    1、安装python并查看python安装路径,配置qt的pro文件 sudo apt-get install python-dev否则#include &lt;Python.h&gt; 文件提示找不到  #------------------------------------------------- # # ...
  • 这个是改进后的,之前waitForFinished()阻塞有点问题,这个是获取结束进程的退出状态后执行 .h文件 #ifndef INFACETEST_H #define INFACETEST_H #include <QMainWindow> #include <QComboBox> #...
  • linux qt 程序打包发布 1.linuxdeployqt 安装 最简单的方法直接下载编译好的 linuxdeployqt-x86_64.AppImage文件,将其改名字为linuxdeployqt,并chmod a+x,然后复制到 /usr/local/bin/。然后命令行输入 ...
  • Linux中的shell脚本浅析

    2014-11-10 20:52:51
    linux系统下给命令指定别名alias命令用法:  在linux系统中如果命令太长又不符合用户的习惯,那么我们可以为它指定一个别名。虽然可以为命令建立“链接”解决长文件名的问题,但对于带命令行参数的命令,链接就...
  • 在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小时)sleep 1 睡眠1秒sleep 1s 睡眠1秒sleep 1m 睡眠1分sleep 1h 睡眠1小时sleep 命令详解linux sleep 命令用来睡眠一段时间,sleep 可以用来将目前动作延迟一...
  • Qt Linux下获取系统信息 由于QOperatingSystemVersion在linux系统下无效,所以我们需要重新实现下一些功能,比如系统版本、CPU、GPU信息等。我们使用linux下的shell来获取各种信息。 起初,我使用QProcess执行多条...
  • 刚刚,做qt写的一个演示程序,跑在嵌入式linux系统,但是用qprocess执行 “echo xxx> /home/xxx.txt” 的时候发现一个器官的的问题,这个居然,不能用echo输出文件?? 经过调试发现,在qt linux程序,不能直接...
  • 定时执行步骤:利用crontab来定时执行任务大体有以下两步:shell一、编写shell脚本编程二、利用crontab加入到定时任务队列app1、如何创建shell脚本程序必须如下面的行开始(必须方在文件的第一行):编辑器#!...
  • shell脚本(1) Shell脚本是一个特殊的应用程序,负责接收用户输入的操作命令并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。可以在/etc/shells文件查看当前系统所支持的shell种类。[root@localhost~...
  • linux shell脚本编写

    2012-02-23 22:01:21
    LinuxShell脚本相当在windows系统中一个脚本文件,当你要关掉计算机的时候,只要关掉此脚本即可,ko!因为此脚本的文件里含有关闭计算机的命令。 在shell脚本里编程的时候,要注意一个问题,则#!/bin/bash or/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,873
精华内容 4,349
关键字:

linuxqt执行shell命令

linux 订阅