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

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

目录

首先:创建一个主界面程序

.h头文件:

 .cpp文件

最后

main函数

 运行:

拖拽打开程序

 运行结果


第一个小收获:

众所周知,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图标打开程序后的运行结果:

 运行:
拖拽打开程序:

 运行结果

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值