2010-07-12 2 views
1

.exe 파일과 관련 .myFile 확장자를 해당 .exe 파일에 생성했습니다. .myFile 파일을 두 번 클릭하고 .exe 파일을 열었 으면합니다. 이를 위해 나는 다음과 같은 짓을 :유니 코드 기호로 이름을 가진 파일을 여는 방법

int main(int argc, char *argv[]) 
{ 
    QString fileName(QObject::tr(argv[1])); 
    if (fileName != "") 
    { 
     mainWin.loadFile(fileName); 
    } 
.................. 
} 

을하지만 나의 유니 코드 문자 (예 : "Здравствуй.myFile")에서 파일의 대신 "Здравствуй는"당신이 "볼 수있는 이름 때 ?????? ?? ". 이 문제를 해결하는 방법? 나는 이것이 MS Word가 그것을하기 때문에 문제가 해결되었다는 것을 안다.

+0

OT. 그러나 QObject :: tr()은 UI 텍스트를 번역하기위한 것입니다. 번역 된 이름으로 파일을 여는 것을 의미하는 것이 아니라면 여기에 tr()을 사용하면 안됩니다. –

답변

8

int main(int argc, char** argv)에 초점을 맞춘 이전의 대답은 불필요하게 복잡합니다. Qt는 더 나은 대안을 가지고 있습니다. Qt는 문서에서

는 : On Windows, the QApplication::arguments() are not built from the contents of argv/argc, as the content does not support Unicode. Instead, the arguments() are constructed from the return value of GetCommandLine().

그래서 정답은 당신에게 QString의 유니 코드 파일 이름을 줄 것이다 qApp.arguments().at(1)을 사용하는 것입니다.

+0

그리고 당신이 언급 한 함수를 호출 할 수 있으려면 QApplication 생성자에 어떤 인수를 전달해야합니다. – Narek

+0

qApp이란 무엇입니까? 나는 그것을 건설하거나 얻는다? – Narek

+0

http://doc.qt.nokia.com/4.6/qapplication.html#qApp 참고 : 모든 Qt 앱에는 해당 매크로가 있어야합니다. main에서 normal argc/argv를 전달해야합니다. Windows에서는 무시되지만 프로그램을 Mac 및 Linux로 이식 할 수 있습니다. – MSalters

1

당신은 Windows에서 wmain 대신 main를 사용해야합니다 : 당신이 (모든하지만 쓸모 Windows에서이다) C 표준을 따라야 할 경우

int wmain(int argc, wchar_t** argv) { 
    QString fileName = QString::fromWCharArray(argv[1]); // untested 

, 당신은 대신 GetCommandLineWCommandLineToArgvW를 사용할 수 있습니다. 당신이 전달하는 유니 코드를 가정

+0

wchar_t ** argv를 char ** argvCHAR로 변환하는 방법을 말하면 QApplication 생성자에 전달할 수 있습니다. – Narek

+0

MSalters의 솔루션을 사용하십시오. 'QApplication'은 올바른 일을합니다. – Philipp

0

실제로으로 저장됩니다 UTF-8, 인수를 읽을 같은 것을 QString :: fromUtf8를 사용해보십시오 :

int main(int argc, char *argv[]) 
{ 
    QString fileName(QObject::trUtf8(argv[1])); 
    if (fileName != "") 
    { 
     mainWin.loadFile(fileName); 
    } 
    // stuff 
} 

QObject를 :: trUtf8 실제로 그 것이다 래퍼입니다 QString : fromUtf8을 사용하고 여전히 번역을 수행합니다. 비록 내가 왜 파일 이름을 번역하고 싶은지 이해할 수는 없지만)

+0

Windows에서는 UTF-8로 저장되지 않습니다. – Philipp

관련 문제