概述
何为文件打开关联,比如,一个扩展名为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 如何实现文件类型关联的全部内容,希望文章能够帮你解决Qt 如何实现文件类型关联所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复