首页 > 编程语言 >Qt/C++使用小记1【.exe程序拖拽文件使程序启动时,获取该文件路径】

Qt/C++使用小记1【.exe程序拖拽文件使程序启动时,获取该文件路径】

时间:2024-07-25 15:59:47浏览次数:24  
标签:文件 SignalSoftExit exe 界面 程序 closeEvent main MainWindow

写一写小小的收获吧,因为踏足也有一定时间了,自己也平时有记录,但是总感觉文件转来转去很麻烦,有时甚至找不到,就放在网上,自己需要的时候也可以翻一翻~

第一个小收获:

众所周知,qt生成的默认的.exe也是支持拖拽文件到.exe图标上的时候打开程序的,但是程序内不会有任何表现,仅仅是启动程序而已,刚好最近在项目中有一个需求就是要能够拖拽文件到.exe程序图标上打开的时候获取到该文件的路径而做一系列处理,所以就记录下这一个,自己也是找了好久

直接上代码:

首先:创建一个主界面程序,更改默认构造函数,增加一个接收字符串的参数
.h头文件:

        其中的SignalSoftExit信号是用于关闭整个软件的,在main函数内再提,此信号可以在界面无论打开多少个界面,只要主界面退出的时候,整个app就退出,要在主界面重写closeEvent函数

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(const QString strDragFilePath = "",QWidget *parent = 0);
    ~MainWindow();

signals:
    /**
     * @brief SignalSoftExit 整个退出软件
     */
    void SignalSoftExit();

protected:
    /**
     * @brief closeEvent    关闭事件执行函数
     * @param event         关闭事件
     */
    void closeEvent(QCloseEvent*event);

private:
    Ui::MainWindow *ui;
};
 .cpp文件

        这里就直接打印出来,但是调试的时候不能拖动,只有显示到界面上,遂设置了一下字符串内容到了界面上。关于重写closeEvent函数,界面在关闭的时候会进closeEvent事件,只需要将.h头文件内的SignalSoftExit信号发出,在main函数内绑定即可(见下列的main函数)。

#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QDebug>

MainWindow::MainWindow(const QString strDragFilePath, QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //  打印拖拽打开的文件
    qDebug() << "strDragFilePath = " << strDragFilePath;
    ui->label_path->setText(strDragFilePath);
}

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

/**
 * @brief closeEvent    关闭事件执行函数
 * @param event         关闭事件
 */
void MainWindow::closeEvent(QCloseEvent *event)
{
    Q_UNUSED(event);
    //  发出关闭主界面信号
    emit SignalSoftExit();
}
最后:最重要的一步即main函数内增加代码
main函数

        最关键的就是main函数了,即在程序最初的时候进行获取拖拽至.exe图标的文件的绝对路径的。还有之前提到的关闭整个软件SignalSoftExit信号,与QApplication的槽函数quit进行绑定即可。

#include "MainWindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // 获取命令行参数列表
    QStringList args = a.arguments();
    // 移除掉程序本身路径,剩下的视为文件路径
    args.removeFirst();
    QString strDragFilePath = "";
    if (!args.isEmpty())
    {
        if(args.size() == 1)
            strDragFilePath = args[0];
    }

    //  实例化生成主界面,将获取到的文件路径参数传给主界面
    MainWindow w(strDragFilePath);
    //  连接退出信号参数,整个界面会退出
    QObject::connect(&w, &MainWindow::SignalSoftExit,&a,&QApplication::quit);
    w.show();

    return a.exec();
}

拖拽文件至.exe图标打开程序后的运行结果:

 运行:
拖拽打开程序:

 运行结果

从结果上看,是能获取到文件的路径的~如果持不同意见还有其他更便捷的方法,欢迎探讨! 

标签:文件,SignalSoftExit,exe,界面,程序,closeEvent,main,MainWindow
From: https://blog.csdn.net/m0_74805797/article/details/140637051

相关文章

  • 如何从另一个文件运行 python 文件
    我正在尝试从另一个名为LoginOrReg的文件运行一个名为HabitTracker的python文件,但是当我这样做时,它会重新运行LoginOrReg文件。我已经尝试过这个classLoginOrReg:def__init__(self,db,cursor,login_username,data):self.db=mysql.connector.......
  • 程序设计:C++入门教程(速成) + 15道经典例题(附带例题解析)
    本文章以实用为主,若实在是不明白文字所表达的内容,无脑复制代码,自己动手运行一下,实验一下即可理解文章内容,放心,代码是全的,全选复制粘贴即可不废话,直接开整数据类型常用数据类型int:整数类型,用于表示整数值。例如:1,2,-3,0等。float:单精度浮点数类型,用于表示带有小数点的数......
  • 修改 Visual Studio 程序集信息中的默认公司
    我们在使用VisualStudio创建项目时,会发现程序集信息中的默认公司是Microsoft我们可以通过修改项目文件来修改程序集信息中的默认公司。但是这种方式修改的是当前项目文件,后续创建的项目还是会使用默认的公司信息。我们可以通过注册表来修改默认公司,这样之后创建的项目都会......
  • C#读取指定json配置文件
    在C#开发中,有时候我们需要从JSON文件中读取配置或数据。本文将介绍一个简单的方法,使用Newtonsoft.Json库来读取指定的JSON文件并进行反序列化操作。读取json配置文件的源码取自SqlSugar作者的ReZero开源项目:https://gitee.com/DotNetNext/ReZero1.准备工作首先,我们需要使用NuGe......
  • 微信小程序制作整个流程完整教程
    微信小程序制作整个流程完整教程32r.com  发布时间:2023-12-2816:25:18  作者:xx   我要评论本文从小程序注册、小程序信息完善及开发前准备、小程序代码审核与发布、小程序申请微信认证和微信支付、小程序的绑定和关联,这5个方面来为大家介绍微信小程序是怎么制作的......
  • java处理超大文件面试题
    java海量大文件数据处理方式 1.给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。s遍历文......
  • WPS没保存的文件找回
    事情的起因是我昨天用WPS编辑的一个excel,发现打开找不到新内容,后来发现WPS的文件列表中有一个标记着【只读】字样的文件,顺利从里面找到了前一天编辑的内容。然后我看到这个【只读】文件存在于WPS的一个backup文件夹下,就去看了一下这个文件夹,居然发现上个月也是莫名其妙没有了的一......
  • Pandas 读取带空格的文件名
    我有一个由空格分隔的3列文本文件,我喜欢将其放入数据框中。我使用以下构造来执行此操作:df=pd.read_csv(my_file,sep='',skiprows=4,names=('cola','colb','filename'))效果很好,直到我遇到其中包含空格的文件名。我在pd.read_csv中找不到选项来限制列数并处......
  • CMake 生成 Visual Studio 项目管理工程文件 sln
    前言全局说明CMake生成VisualStudio项目管理工程文件sln一、说明环境:Windows7旗舰版二、生成sln项目工程文件2.1UI界面版生成方式https://blog.csdn.net/analogous_love/article/details/1349075402.2命令行生成方式2.2.1看看都支持生成哪些版本2.2.......
  • 微信小程序-自定义导航栏
    参考文章:自定义navigationBar顶部导航栏,兼容适配所有机型(附完整案例)|微信开放社区(qq.com)1.设置导航栏样式自定义"navigationStyle":"custom"可以选择在页面json文件设置,也可选择在app.json文件设置,我选择页面配置2.定义想要的导航栏样式.navCustom{position:......