mfc打开指定路径下指定类型文件_Qt下的文件关联

  • Post author:
  • Post category:其他


在windows下,双击doc类型文件,系统会调用word软件,并打开双击文件。这个技术的本质是写入注册表。在Qt编程中,可以借助QSettings类,实现我们想要的功能。

下面是代码示例

#include "mainwindow.h"
void registerFileRelation(const QString& className,const QString& appPath,const QString& ext,const QString& extDes){
QString baseUrl("HKEY_CURRENT_USER\\Software\\Classes"); // 要添加的顶层目录
QSettings settingClasses(baseUrl,QSettings::NativeFormat);

// 在...Classes\类别下创建一个新的类别,并设置该类别打开文件时的调用参数
settingClasses.setValue("/" + className + "/Shell/Open/Command/.","\"" + appPath + "\" \"%1\"");

// 文件类型描述
settingClasses.setValue("/" + className + "/.",extDes);

// 设置该类别的默认图标默认图标
settingClasses.setValue("/" + className + "/DefaultIcon/.",appPath + ",0");

// 关联ext 和 类别
settingClasses.setValue("/" + ext + "/OpenWithProgIds/" + className,"");

// 立即保存该修改
settingClasses.sync();
}

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

QString className("com_920d_gsk"); // 自定义的类别
QString appPath = QString(argv[0]).toStdString().c_str(); // 关联的程序目录
qDebug()<<"ss:"<<:applicationfilepath> QString ext(".lad"); // 关联的文件类型
QString extDes("920d梯形图工程文件"); // 该文件类型描述

registerFileRelation(className,appPath,ext,extDes);

MainWindow w;
if(argv[1] != NULL)
{
w.openFile(argv[1]);
}

w.show();
return a.exec();
}

主要两个块操作, registerFileRelation 函数注册文件类型,图标,和打开关联程序路径 执行完上一步,我们在注册表中就能看到如下的效果了/

797fdba473cdd9df609fd9258a23816f.png

这时双击文件是无效的。我们需要将双击的文件路径传给指定程序,这就要求该指定程序需要能接受参数,并做适当的处理。即对 main(int argc, char *argv[])中的 argv[1] 进行处理,(argv[0]是程序名称) 上述代码中的

 if(argv[1] != NULL)
{
w.openFile(argv[1]);
}

做的就是这样的工作。

双击lad文件,可以直接运行程序并打开

58705b7cda44946edb9c9e9d577de2fc.png



版权声明:本文为weixin_39687990原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。