网上VC操作注册表的文章很多,但是Qt的却相对较少,其实Qt操作也比较简单,但是不熟悉注册表的格式,可能会有点麻烦。
1 bool connectFileToProgram()
2 {
3 QSettings *ukenvFileReg = new QSettings("HKEY_CLASSES_ROOT\\.otp", QSettings::NativeFormat);
4
5 //判断UKEnv类型是否已在注册表中,并关联了正确的打开方式(程序打开方式),没有则写入
6 QString currentValue = ukenvFileReg->value("Default").toString();
7
8 if (currentValue.isEmpty() ||
9 currentValue != "OTPFile")
10 {
11 ukenvFileReg->setValue("Default", "OTPFile");
12
13 QSettings *ukenvIconReg = new QSettings("HKEY_CLASSES_ROOT\\OTPFile\\DefaultIcon", QSettings::NativeFormat);
14 ukenvIconReg->setValue("Default", QString(qApp->argv()[0]) + ",0"); //把当前运行的程序资源中的第一个图标置入
15 delete ukenvIconReg;
16
17 QSettings *ukenvProgramReg = new QSettings("HKEY_CLASSES_ROOT\\OTPFile\\shell\\open\\command", QSettings::NativeFormat);
18 ukenvProgramReg->setValue("Default", "\""+QString(qApp->argv()[0])+"\"" + " \""+"%1"+"\""); //把当前运行的程序路径置入
19 delete ukenvProgramReg;
20 }
21 delete ukenvFileReg;
22
23 return true;
24 }
25
26 int main(int argc, char *argv[])
27 {
28 QApplication a(argc, argv);
29
30 connectFileToProgram();//关联程序默认打开方式,并设置图标
31
32 QT_MAP w;
33 if(qApp->argv()[1] != NULL)
34 {
35 w.openFile(qApp->argv()[1]);
36 }
37 w.showMaximized();
38
39 return a.exec();
40 }
注:1.".otp"为自定义格式文件扩展名;2.OTPFile为otp文件的格式类型,名称可以随意。