~~各位大佬好,我是超级超级小白,如有不对的地方请赐教,请不要喷我!
需求描述:在界面中设置一个按钮,打开桌面一个应用程序。无论程序放在哪里都能打开。
代码如下:
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一起使用,不生效。
本文详细介绍如何使用Qt实现一个按钮来打开桌面上任意位置的应用程序。通过代码示例,展示了如何设置按钮的单击和双击事件,以及如何利用QProcess::startDetached函数来启动目标程序。
2652

被折叠的 条评论
为什么被折叠?



