我有一个程序和一个带有一些信息行的.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文件时,程序启动但不加载文件。我需要做些什么才能使其正确加载?示例代码将非常感激。
答案 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.
}