写一写小小的收获吧,因为踏足也有一定时间了,自己也平时有记录,但是总感觉文件转来转去很麻烦,有时甚至找不到,就放在网上,自己需要的时候也可以翻一翻~
第一个小收获:
众所周知,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