Qt - Opening a custom file via double-click

I have a program and a .l2p file with some lines of info. I have run a registry file:

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\""

When I double-click the .l2p file the program starts but doesn't load the file. What do I have to do to make it load properly? Example code would be very appreciated.

Answers


When you double click on a file the file name is passed as a command line argument to the associated program. You have to parse the command line, get the file name and open it (how to do that depends on how your program works).

#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;
    }
}

If you run this program from command line:

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

In Qt if you create a QApplication you can also access the command line arguments via QCoreApplications::arguments().

You might want to load the file after having created your main window. You may do something like this:

#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();
}

This way the slot MainWindow::initialize() (which you have to define) gets called as soon as the event loop has started.

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

If I'm understanding your question correctly, L2P.exe is a Qt program you created and you want to handle a passed argument as specifying a file to open. If that's the case, you just need to read that argument in your main() method and handle it. (This isn't something that happens automatically.) Something like the following, although you obviously want to add a bit of error checking:

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.
}

Need Your Help

Detection of overflow

c++ char overflow unsigned

How to detect overflow of unsigned char variable in c++?

PHP PDO prepared statements syntax problems

php mysql pdo prepared-statement

I am trying to use prepared statements using PDO in PHP. It seems to work fine until I am try return a name with white spaces.