Qt怎么实现文件关联
QT怎么实现文件关联啊,有个文件我在操作系统中设置“打开方式”->“选中我的软件”->“始终以这种方式打开该软件”,由于我没有在我的代码中做任何设置,所以每次打开这种文件时,只有软件打开了,但是并没有打开这个文件,我想问一下,怎么在我的代码添加一些来实现这个功能,我打开文件是根据文件的路径名来打开的,我想问一下,我关联后,双击怎么获取文件的路径名关联 --------------------编程问答-------------------- 文件路径名是命令行参数,一般main函数里面argv[1]就是。 --------------------编程问答-------------------- 我打印argv[0]为我当前运行程序的exe文件的位置,我现在要获得的是文件关联后,双击文件,或的文件的路径,而不是我自己运行程序的路径 --------------------编程问答-------------------- 打印argv[1]的 值为空 --------------------编程问答-------------------- 这个还是要向操作系统注册一下的吧 --------------------编程问答-------------------- 修改注册表某些项,具体参照魔方手机助手的 文件关联的 查看他们的注册表的修改http://www.mobfound.com --------------------编程问答-------------------- QSettings *ukenvFileReg = new QSettings("HKEY_CLASSES_ROOT\\.{fileType}", QSettings::NativeFormat); //
//判断UKEnv类型是否已在注册表中,并关联了正确的打开方式(程序打开方式),没有则写入
QString currentValue = ukenvFileReg->value("Default").toString();
if (currentValue.isEmpty() ||
currentValue != "{Program_Type}")
{
//QMessageBox::information(NULL,"information","Unregistered or Uncorrect");
ukenvFileReg->setValue("Default", "{Program_Type}");
QSettings *ukenvIconReg = new QSettings("HKEY_CLASSES_ROOT\\.{fileType}\\DefaultIcon", QSettings::NativeFormat);
ukenvIconReg->setValue("Default", QString(qApp->argv()[0]) + ",0"); //将当前运行的程序图标置入
delete ukenvIconReg;
QSettings *ukenvProgramReg = new QSettings("HKEY_CLASSES_ROOT\\{Program_Type}\\shell\\open\\command", QSettings::NativeFormat);
ukenvProgramReg->setValue("Default", QString(qApp->argv()[0]) + " %1"); //将当前运行的程序路径置入
delete ukenvProgramReg;
}
delete ukenvFileReg;
--------------------编程问答-------------------- 这是我到网上找的,我在注册表中能够找到我程序的路径,但是我需要获得的是双击打开的那个文件 --------------------编程问答-------------------- 要想双击打开选中的文件,首先需要将文件关联的注册表写的生效才可以,以下仅供参考:
//删除默认项
QSettings *settings = new QSettings("HKEY_CLASSES_ROOT\\.apk\\", QSettings::NativeFormat);
settings->remove(".");
//将默认项改成需要打开应用程序在注册表中的路径
settings->setValue(".",QVariant("xxxx"));
delete settings;
//插入安装程序的注册表项
QSettings *settings1 = new QSettings("HKEY_CLASSES_ROOT\\xxxx\\", QSettings::NativeFormat);
QString strIcoPath = "iconfilepath"+",0";
settings1->setValue(".","desc");
strIcoPath.replace("/","\\");
settings1->setValue("DefaultIcon/.",strIcoPath);
settings1->setValue("shell/.","open");
settings1->setValue("shell/open/.","安装程序");
QString cmd = "\""+"/xxxx.exe\" -path=\"%1\"";
cmd.replace ("/","\\");
settings1->setValue("shell/open/command/.", cmd);
delete settings1;
//在注册表中右键删除下面这个注册表项:
//HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.apk\UserChoice
//这个注册表项下的值和数据(具体就是名为progid的值和它的数据),是对应右键打开方式所设置的默认打开程序的
QSettings *settings2 = new QSettings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.apk\\", QSettings::NativeFormat);
settings2->setValue("Progid",QVariant("xxxx"));
delete settings2;
//通知系统强制刷新系统图标缓存, 需要有#include <Shlobj.h>头文件
::SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST|SHCNF_FLUSH,0,0); --------------------编程问答-------------------- 你的问题解决了吗?我也遇到这样的问题,请问你是怎么解决的啊 --------------------编程问答-------------------- 解决了,在main函数中有两个参数一个是agrc,argv,你把argv[1](存储的是你要打开的文件的路径),你把它传到你的openFile函数就可以了
补充:移动开发 , Qt