QT 按钮分单击、双击事件打开应用程序.exe

本文详细介绍如何使用Qt实现一个按钮来打开桌面上任意位置的应用程序。通过代码示例,展示了如何设置按钮的单击和双击事件,以及如何利用QProcess::startDetached函数来启动目标程序。

~~各位大佬好,我是超级超级小白,如有不对的地方请赐教,请不要喷我!

需求描述:在界面中设置一个按钮,打开桌面一个应用程序。无论程序放在哪里都能打开。

代码如下:

01:首先是.h文件

需要的头文件:

#include <QMainWindow>
#include <QTimer>

public:
    OPEN(QWidget *parent = nullptr);
    ~OPEN();

    QString FileName;//保存文件的路径

    QTimer* pQTimerDoubleClicked;//判断单双击的定时器

    int isDoubleClicked;//区分是单机还是双击


private slots:
    void on_toolButton_clicked();

    void timerSingleClick();//定时器事件,处理单机任务

02:接着是.cpp文件

需要引入的头文件

#include "open.h"
#include "ui_open.h"
#include <QString>
#include <QDebug>
#include <QProcess>
#include <QStandardPaths>
#include <QStyleFactory>
#include <QString>
#include <QDir>
#include <QFileDialog>
#include <QMessageBox>

在构造函数中初始化变量:

OPEN::OPEN(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::OPEN)
{
    ui->setupUi(this);
    isDoubleClicked=0;
    pQTimerDoubleClicked=new QTimer(this);//新建定时器
    connect(pQTimerDoubleClicked,SIGNAL(timeout()),this,SLOT(timerSingleClick()));//关联定时器和槽函数
}

在ui界面设置一个按钮,这个按钮的点击事件如下:

void OPEN::on_toolButton_clicked()
{
//    QProcess::startDetached("C:\\Program Files (x86)\\Tencent\\WeChat\\WeChat.exe",QStringList());
    isDoubleClicked++;
    if(isDoubleClicked==1)
        pQTimerDoubleClicked->start(430);//设置的定时器时间,可以自己设置
    if(isDoubleClicked==2){
        isDoubleClicked=0;//先初始化
        pQTimerDoubleClicked->stop();//先初始化
        //按钮双击响应代码放这里
//        QMessageBox::warning(this,tr("警告"),tr("我是双击!!!"));
        QProcess::startDetached(FileName,QStringList());//这句话就是打开桌面程序的关键
    }
}

接下来是连接的槽函数:

void OPEN::timerSingleClick(){
    isDoubleClicked=0;//先初始化
    pQTimerDoubleClicked->stop();//先初始化
    //按钮单击响应代码放这里
//    QMessageBox::warning(this,tr("警告"),tr("单击"),tr("确定"));
    //选择单个文件
    QString curPath=QDir::currentPath();//获取应用程序当前目录
    QString digTitle="选择一个文件";
    QString filter="文本文件(*.txt);;图片文件(*.jpg *.gif);;程序文件(*.exe);;所有文件(*.*)";
    QString aFileName=QFileDialog::getOpenFileName(this,digTitle, curPath, filter);
    if(!aFileName.isEmpty()){
        FileName=aFileName;
        qDebug()<<aFileName;
    }
}

03:ui界面,很简单,就一个按钮:

04:运行效果:

描述:按钮单击是找到你要打开的应用程序目录,在双击按钮,就是打开刚才你找到目录的应用程序。

好了以上就是一个按钮实现打开一个桌面的应用程序。

按钮区分单击和双击是参考的这篇文章:Qt 单击和双击事件响应实现_qt signal双击_约翰一世的博客-CSDN博客

其余的是自己发挥!!!

5.后期追更:想设置启动程序的工作目录

使用startDetached的重载函数:startDetached(const QString &program,const QStringList &arguments,const QString &workingDirectory);

使用示例:startDetached(要打开exe的程序路径,QStringList(),设置打开exe的工作目录);

第二个参数QStringList(),是默认的,暂时还不清楚这个参数是什么作用,有知道的小伙伴评论区告诉我,谢谢~

和他很像的另一个设置工作目录的参数:setWorkingDirectory(工作目录);

这个函数要和start一起使用才生效,和startDetached一起使用,不生效。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值