当前位置:编程学习 > wap >>

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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,