Qt调用外部程序

2023-11-17

一、调用系统默认应用打开文件

使用QDesktopServices的openUrl()成员

这个函数是跨平台的,Qt会根据不同的系统平台调用默认的程序打开指定文件,QUrl存放制定的路径,使用非常简便,示例代码如下:

QString fileName=QFileDialog::getSaveFileName(this,tr("保存"), QCoreApplication::applicationDirPath()+"/socketReport", "Text files(*.txt)");
QDesktopServices::openUrl(QUrl(fileName));

两行打开代码就能实现使用默认外部程序打开指定的txt文件。

又比如,打开一个网页:

QDesktopServices::openUrl(QUrl(QString("http://www.baidu.com/")));//调用系统的默认浏览器打开百度主页


二、指定外部程序打开指定文件

使用QProcess解决:

· (1)直接调用QProcess::execute()静态成员

    QStringList args;
    args<<QDir::homePath()+QString("/test.txt");
    QProcess::execute(QString("gedit"),args);//参1位应用程序名,参2为命令参数

(2 创建QProcess对象,调用start()

    QString appName=QCoreApplication::applicationDirPath()+"/tools/tcpServer/TcpServer_Test.exe";
    QProcess *toolProcess = new QProcess;
    toolProcess->start(appName);
</pre><span style="font-size:12px;"> 注:1.方法(2)还可使用waitForStarted()和waitForFinished()进行精细控制,详见Qt Assistant</span><p></p><p><span style="font-size:12px;"><span style="white-space:pre"></span>       2.方法(1)会阻塞Qt本应用,直到调用的外部程序关闭,而方法(2)不会</span></p><p></p><p></p><p><span style="font-size:12px"><span style="white-space:pre"></span></span></p><p><span style="font-size:12px"><span style="white-space:pre"></span>一个带界面的示例程序如下:</span></p><p><span style="font-size:12px"></span></p><pre name="code" class="cpp">#include "dialog.h"
#include "ui_dialog.h"

#include <QProcess>
#include <QStringList>
#include <QDir>
#include <QFileDialog>

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    ui->pushButton->setEnabled(false);
    ui->pushButton_2->setEnabled(false);

}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::on_pushButton_clicked()
{
    QString inputName=ui->lineEdit->text();
    if(inputName.isEmpty())
        inputName=QDir::homePath();
    QString fileName=QFileDialog::getOpenFileName(this,tr("Open"),inputName,tr("text(*.txt *.c *.h *.cpp *.sh)"));
    if(!fileName.isEmpty())
    {
        ui->lineEdit->setText(fileName);
        ui->pushButton_2->setEnabled(true);
    }
}

void Dialog::on_lineEdit_textChanged(const QString &arg1)
{
    ui->pushButton->setEnabled(true);
}

void Dialog::on_pushButton_2_clicked()
{
    QString fileName=ui->lineEdit->text();
    QProcess::execute(QString("notepad"),QStringList()<<fileName);
}


运行效果如下:



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt调用外部程序 的相关文章

随机推荐

  • 系统架构主题之七:基于架构的软件设计方法及应用

    1 基于架构的软件设计方法概念 关键词 ABSD 自顶向下 递归迭代 与需求同步 设计元素 视角与视图 用例和质量场景 预期和非预期等 总的来讲 ABSD方法分为如下六个大的阶段 1 体系结构需求阶段 相比传统软件系统设计 架构设计在需求获
  • Centos7 命令行安装JDK步骤

    在国内 甲骨文公司的jdk下载的速度是很慢的 这里建议使用国内华为云的jdk 两者没有区别 就是做了一个搬运工作 对国内使用JDK环境的人来说非常友好 第一步 选择自己合适的JDK版本 网站在下面给出 https repo huaweicl
  • 【数据库】JDBC编程

    前言 小亭子正在努力的学习编程 接下来将开启javaEE的学习 分享的文章都是学习的笔记和感悟 如有不妥之处希望大佬们批评指正 同时如果本文对你有帮助的话 烦请点赞关注支持一波 感激不尽 目录 前言 什么是JDBC JDBC工作原理 JDB
  • 杰里之内置触摸按键配置篇

    关于内置触摸按键感应原理 内置触摸按键检测模块是利用人体分布电容对触摸按键电容影响来进行按键检测的 如下图 当人体触摸外部电容按键时 IO 口外部电容增加 芯片内部的触摸感应模块可以检测到该电容 变化 从而检测到按键是否被按下 在没有触摸的
  • Opencv(C++)笔记--打开摄像头、保存摄像头视频

    1 打开摄像头 关键代码语句 VideoCapture cam 0 cam read img imshow cam img include
  • 算法基础--蒙特卡洛模拟

    蒙特 卡罗方法 Monte Carlo method 也称统计模拟方法 是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明 而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法 是指使用随机数 或更常见的伪随机数 来解决很
  • uboot下实现U盘自动升级程序的思路分析(基于USB系统、eMMC系统、FAT32文件系统)

    1 常见的升级方式 1 1 应用程序升级 优点 在图形化界面操作 只需要选中升级文件并点击升级即可 操作简单 缺点 应用程序必须能正常启动 当程序出现bug就不能升级 可靠性差 总结 操作简单 适合用户 1 2 uboot下tftp升级 优
  • WebService入门教程(服务端发布WebService)

    本篇内容过多 时间紧迫的朋友可以通过目录快速筛选自己想要看的内容 本人接触webservice也没多久 也处于学习阶段 如果有错误请指正 如果已经是大神请略过这篇文章 这篇文章不涉及webservice的底层原理 属于入门级文章 就当是笔记
  • 系统找不到d3dcompiler_33.dll如何解决的?

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或者损坏了 这时你只需下载这个d3dcompiler 33 dll文件进行安装
  • Disconnected: No supported authentication methods available(server sent:public key)

    Putty登陆服务器时 报错 Disconnected No supported authentication methods available server sent public key 重置服务器密码即可
  • windows 平台的python语言 PCL 安装包

    之前很多人找我要点云数据处理的 PCL 的python语言PCL 的 whl 安装包 我统一放到百度网盘 就不一一回复了 目前仅支持python 3 6 3 7 版本 python pcl 0 3 0rc1 cp37 cp37m win a
  • ssm框架下的文件上传和下载

    ssm下的文件上传和下载 1 文件上传 1 1 文件上传需要的依赖 文件上传需要使用到 commons fileupload 和 commons io 两个 jar 包
  • C++ 继承同一个的基类的所有派生类使用同一个全局变量的三种方式

    定义全局变量类型 ifndef D HPP define D HPP include
  • 壁画修复项目

    2020年8月11日 开始制作壁画数据集 2020年8月13日 完成了196张壁画数据集的制作
  • 中文转换为完整拼音算法原理分析

    最近由于项目需要 对简体中文转拼音的算法作了一些了解 然而在google找到的大多是获得简体中文拼音首字母的算法 好不容易让我找到了一个sunrise spell的类 专门用于中文转完整拼音 觉得的确做得不错 于是对它的算法作了一些分析 总
  • Linux中安装软件到指定文件夹

    一丶编译安装make install方式 一般来说都是先用tx zxvf解压tar gz再make编译之后直接make install安装 但是这会直接安装到默认路径下 想要指定位置安装 则需在make install加入 make PRE
  • golang-bufio 缓冲写

    1 缓冲写 在阅读这篇博客之前 请先阅读上一篇 golang bufio 缓冲读 buffered output Writer implements buffering for an io Writer object If an error
  • Go语言的中“...”省略号总结

    1 数组中的 省略号 在数组的定义中 如果在数组长度的位置出现 省略号 则表示数组的长度是根据初始化值的个数来计算 因此 q int 1 2 3 等同于var q 3 int 3 int 1 2 3 按我目前获得的信息来看 q int 1
  • 静态链表系列操作

    静态链表 include
  • Qt调用外部程序

    一 调用系统默认应用打开文件 使用QDesktopServices的openUrl 成员 这个函数是跨平台的 Qt会根据不同的系统平台调用默认的程序打开指定文件 QUrl存放制定的路径 使用非常简便 示例代码如下 QString fileN