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

实际开发过程中时常遇到这种情况:双击自定义的后缀类型(例如:.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

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值