qt开发问题之自定义文件后缀与指定程序关联解决方案(window/Linux)

在实际开发中,当需要双击特定后缀的文件调用指定程序(如Test.exe)打开时,可以采用两种方法在Windows系统中实现文件关联。一种是通过编写注册表脚本,另一种是利用assoc和ftype命令。在QT中,可以使用QProcess来执行这些命令。文章未提及Linux的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实际开发过程中时常遇到这种情况:双击自定义的后缀类型(例如:.ext),想要调用(Test.exe)打开,这个时候就需要设定文件类型的关联了。

1. window(两种方式)

1.1 写注册表关联

/*******************************************************************
* 注册文件关联
*       className    // 自定义的类别
*       appPath      // 关联的程序目录
*       ext          // 关联的文件类型
*       extDes       // 该文件类型描述
*******************************************************************/
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();
}
调用:
QString className("LookExe");                           // 自定义的类别
QString appPath("E:\\Asdst\\00ssag\\winExe\\test.exe"); // 关联的程序目录
QString ext(".ets");                                    // 关联的文件类型
QString extDes("查看");                                  // 该文件类型描述

registerFileRelation(className,appPath,ext,extDes);

1.2 使用assoc和ftype命令


相关命令行调用如下:

assoc .ets=etsfile

ftype etsfile="E:\\Asdst\\00ssag\\winExe\\test.exe" "%1"

 说明:在QT中使用Qprocess调用(systme调用会有黑框闪现)

    QString strAssoc = "assoc .eest=eestfile";                                                      // 显示或修改文件扩展名的关联
    QString strFtype = QString("ftype eestfile=\"%1\"").arg(QApplication::applicationFilePath());   // 显示或修改用在文件扩展名中的关联
    strFtype.replace("/", "\\");
    QProcess::startDetached("cmd.exe", QStringList() << "/c" << strAssoc + "\n");
    QProcess::startDetached("cmd.exe", QStringList() << "/c" << strFtype + "%1 \n");

2. Linux

....do something

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值