Qt怎么实现文件关联

newsyoung1 2013-01-27 03:12:15
QT怎么实现文件关联啊,有个文件我在操作系统中设置“打开方式”->“选中我的软件”->“始终以这种方式打开该软件”,由于我没有在我的代码中做任何设置,所以每次打开这种文件时,只有软件打开了,但是并没有打开这个文件,我想问一下,怎么在我的代码添加一些来实现这个功能,我打开文件是根据文件的路径名来打开的,我想问一下,我关联后,双击怎么获取文件的路径名
...全文
624 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
newsyoung1 2013-05-16
  • 打赏
  • 举报
回复
解决了,在main函数中有两个参数一个是agrc,argv,你把argv[1](存储的是你要打开的文件的路径),你把它传到你的openFile函数就可以了
moyou3344 2013-05-15
  • 打赏
  • 举报
回复
你的问题解决了吗?我也遇到这样的问题,请问你是怎么解决的啊
寒山-居士 2013-01-28
  • 打赏
  • 举报
回复
要想双击打开选中的文件,首先需要将文件关联的注册表写的生效才可以,以下仅供参考: //删除默认项 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);
newsyoung1 2013-01-28
  • 打赏
  • 举报
回复
这是我到网上找的,我在注册表中能够找到我程序的路径,但是我需要获得的是双击打开的那个文件
newsyoung1 2013-01-28
  • 打赏
  • 举报
回复
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;
寒山-居士 2013-01-28
  • 打赏
  • 举报
回复
修改注册表某些项,具体参照魔方手机助手的 文件关联的 查看他们的注册表的修改http://www.mobfound.com
jinjianxinxh 2013-01-28
  • 打赏
  • 举报
回复
这个还是要向操作系统注册一下的吧
newsyoung1 2013-01-28
  • 打赏
  • 举报
回复 1
打印argv[1]的 值为空
newsyoung1 2013-01-28
  • 打赏
  • 举报
回复
我打印argv[0]为我当前运行程序的exe文件的位置,我现在要获得的是文件关联后,双击文件,或的文件的路径,而不是我自己运行程序的路径
windywater119 2013-01-27
  • 打赏
  • 举报
回复
文件路径名是命令行参数,一般main函数里面argv[1]就是。

16,831

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧