Qt - 双击打开自定义文件

时间:2012-06-12 10:01:03

标签: windows qt loading

我有一个程序和一个带有一些信息行的.l2p文件。 我已经运行了一个注册表文件:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.l2p\DefaultIcon]
@="\"C:\\Program Files\\ToriLori\\L2P.exe\",0"

[HKEY_CLASSES_ROOT\.l2p\shell\Open\command]
@="\"C:\\Program Files\\ToriLori\\L2P.exe\" \"%1\""

当我双击.l2p文件时,程序启动但不加载文件。我需要做些什么才能使其正确加载?示例代码将非常感激。

2 个答案:

答案 0 :(得分:7)

双击文件时,文件名将作为命令行参数传递给关联的程序。您必须解析命令行,获取文件名并打开它(如何执行此操作取决于程序的工作方式)。

#include <iostream>

int main(int argc, char *argv[])
{
    for (int i = 1; i < argc; ++i) {
        std::cout << "The " << i << "th argument is " << argv[i] << std::endl;
    }
}

如果从命令行运行此程序:

>test.exe "path/to/file" "/path/to/second/file"
The 1th argument is path/to/file
The 2th argument is /path/to/second/file

在Qt中,如果您创建了QApplication,您还可以通过QCoreApplications::arguments()访问命令行参数。

您可能希望在创建主窗口后加载文件。你可以这样做:

#include <QApplication>
#include <QTimer>

#include "MainWindow.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow window;

    QTimer::singleShot(0, & window, SLOT(initialize()));

    window.show();

    return app.exec();
}

这样,一旦事件循环开始,就会调用插槽MainWindow::initialize()(您必须定义)。

void MainWindow::initialize()
{
    QStringList arguments = QCoreApplication::arguments();
    // Now you can parse the arguments *after* the main window has been created.
}

答案 1 :(得分:0)

如果我正确理解您的问题,L2P.exe是您创建的Qt程序,并且您希望处理传递的参数作为指定要打开的文件。如果是这种情况,您只需要在main()方法中读取该参数并进行处理。 (这不是自动发生的事情。)如下所示,尽管您显然想添加一些错误检查:

int main(int argc, char *argv[]) {
  QApplication a(argc, argv);

  const QStringList arguments = a.arguments();

  // The final argument is assumed to be the file to open.
  if (arguments.size() > 1 && QFile::exists(arguments.last())) {
    your_app_open(arguments.last());
  }

  // ... etc.
}
相关问题