您的位置:首页 > 编程语言 > Qt开发

Qt 如何实现文件类型关联

2016-09-11 15:54 369 查看
何为文件打开关联,比如,一个扩展名为txt的文本,双击之后会调用 notepad.exe 进行打开,doc的扩展名会调用word打开等等。

咱们今天讲的是如何在Qt所编写的程序实现这个动作。

这个关联动作都是记录在注册表中的。

1:文件格式注册,比如我自己注册了swf格式

则在 HKEY_CLASSES_ROOT\\.swf 分支下。

如下图:.swf 共有两个键值:

默认: XesSwf 我们指定的名字

Content Type: mime 类型,详见百度百科,mime



.swf 下面还有一个分支:DefaultIcon

这个是你希望给这个格式分配的图标,如下:

键值:

默认 后面是程序路径加,0



2:shell 的关联

注册表路径:

HKEY_CLASSES_ROOT\\XesSwf\\shell\\open\\command

如下图:

键值: 默认程序路径 %1 注意都有引号括起来



3:直接上代码

void Util::regSwf()

{

QString appPath = qApp->applicationFilePath();

// 注意路径的替换

appPath.replace("/", "\\");


QString type = "XesSwf";

QSettings *regType = new QSettings("HKEY_CLASSES_ROOT\\.swf", QSettings::NativeFormat);

QSettings *regIcon = new QSettings("HKEY_CLASSES_ROOT\\.swf\\DefaultIcon", QSettings::NativeFormat);

QSettings *regShell = new QSettings("HKEY_CLASSES_ROOT\\XesSwf\\shell\\open\\command", QSettings::NativeFormat);



regType->remove("Default");

regType->setValue("Default", type);



regIcon->remove("Default");

// 0 使用当前程序内置图标

regIcon->setValue("Default", appPath + ",0");



 // 百分号问题

QString shell = "\"" + appPath + "\" ";

shell = shell + "\"%1\"";

regShell->remove("Default");

regShell->setValue("Default", shell);



delete regIcon;

delete regShell;

delete regType;



// 通知系统刷新

::SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST|SHCNF_FLUSH, 0, 0);

}


4: 注意,生成的程序需要以管理员权限运行,才行!





第一个是主程序,第二个事关联后的swf文件,图标都一样了。

5: 在程序内部怎么接收系统传来的文件名呢?

处理argv[1] 即可!这个就是文件路径。得到了文件路径,剩下的就是程序的事了!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  文件关联 Qt