2012-06-12 9 views
2

나는 몇 줄의 정보가 담긴 프로그램과 .l2p 파일을 가지고 있습니다.Qt - 더블 클릭으로 사용자 정의 파일 열기

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하지만 파일을로드하지 않습니다 두 번 클릭 나는 레지스트리 파일을 실행했다. 제대로로드하려면 어떻게해야합니까? 예제 코드는 매우 감사하겠습니다.

답변

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

당신이 명령 줄에서이 프로그램을 실행하면 : 당신은 당신이 또한 QCoreApplications::arguments()를 통해 명령 행 인수에 액세스 할 수의 QApplication을 만들 경우 Qt는에서

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

합니다.

기본 창을 만든 후에 파일을로드 할 수 있습니다. 슬롯 MainWindow::initialize()가 (당신이 정의 할 필요가있는) 즉시 이벤트 루프가 시작으로 호출되는

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

이 방법 : 당신이 뭔가를 할 수 있습니다.

+0

내 프로젝트에서는 이미 Windows 파일 연결 부분을 처리 했으므로 명령 줄 인수 처리를 추가해야했습니다. Qt 애플리케이션 라이프 사이클 내에서이 동작을 실행하는 방법, 특히 WHEN이 완전히 불분명합니다 :'window.show()'다음에'main' 내에서 ... 또는 창에서'onLoad' 이벤트로 ... 또는 무엇을??? 이 대답은 나를 올바른 길로 인도했다. 감사! – aldo

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. 
} 
관련 문제