2013-08-19 4 views
6

QString을 std :: string으로 변환하는 것에 대한 여러 게시물을 보았습니다. 간단해야합니다. 하지만 어쨌든 나는 오류가 발생했습니다.QString을 std :: string으로 변환하십시오.

내 코드는 cmake (VS express를 사용하고 있습니다)를 사용하여 VS 프로젝트로 컴파일되므로 QT 라이브러리에는 아무런 문제가 없으며이 부분 외에도 GUI가 작동합니다.

일부 개체의 이름을 보유하고있는 QComboBox cb과 내가 찾고있는 개체의 이름을 지정할 수있는 QLineEdit lineEdit이 있습니다. 그것은 QComboBoxlineEdit 인수를 인수로 사용하여 이동 단추를 누를 때 테스트되고 작동하는 함수를 실행해야합니다.

여기 이동 버튼을 클릭했을 때의 코드입니다 :

void gui::on_go_clicked(){ 
    std::string str(cb->currentText().toStdString()); 
    //std::cout << str << "\n"; 
    //QString qstr = lineEdit->text(); 
    //std::cout<<lineEdit->text().toStdString(); 
    updateDB(str, lineEdit->text().toStdString()); 
} 

첫 번째 줄, str를 작성, 잘 작동합니다. I.E. 라이브러리 함수 또는 toStdString()에는 아무런 문제가 없습니다. 하지만 내 함수를 실행하면 프로그램이 중단되고 함수가 아닌 이유로 변환하려고하는 부분 때문에 발생합니다. lineEdit->text().toStdString().

lineEdit 상자에 "test"라는 단어를 쓸 때만 나타납니다. 유니 코드에 대한 다른 대답을 보았습니다. 간략하게 살펴 보았습니다. 사용자가 유니 코드가 아니어야하는 '_'및 '.'을 제외하고 lineEdit 상자에 특수 문자를 넣지 않을 것이라고 가정 할 수 있습니다.

+0

또한 문제가되는지는 모르겠지만 QT4 또는 QT5를 사용하고 있는지 완전히 잊어 버립니다. VS, Cmake 및 QT의 다른 버전을 모두 함께 사용하려고 노력하는 것이 절망적이게되었습니다. (저는 인턴이며 모든 것을 직접 설정해야했습니다.) 내 cmakelists.txt에'FIND_PACKAGE (Qt4 REQUIRED)'라고 써 있습니다. 사실, QT4와 QT5 사이에 내가하는 일이 다르다고 생각하지 않습니다. –

+0

그래, 무슨 일이 있었는지 모르겠다. 이전에'toUtf8()을 시도했을 때.constData()', 그것은 작동하지 않았고 유니 코드가 필요 없기 때문에 그것을 사용하고 싶지 않았습니다. 나는 단지 "시험"을 쓰고 있었다. 하지만 이제는'toUtf8(). constData()'를 사용할 때 제대로 작동하고 제 기능을 수행합니다. 하지만 왜'toStdString()'을 사용할 수 없는지 아는 사람이 있습니까? 차라리이 간단한 유지. –

+0

나는 cout 문이 잘못된 문자열을 출력했다고 가정하고 있습니까? –

답변

9

str을 만드는 첫 번째 줄은 정상적으로 작동합니다. I.E. 라이브러리 함수 또는 toStdString()에는 문제가 없습니다. 그러나 내 함수를 실행할 때 프로그램이 중단되어 함수의 것이 아니기 때문에 lineEdit-> text(). toStdString()을 변환하려고하는 부분의 이 있기 때문입니다.

는 테스트를 단순화하고 QString.toStdString() 당신이 무엇을 기대합니까 확인 : 따라서

:

QString text = "Precise text that user would input"; 
std::cout << text.toStdString() << std::endl; //or... 
qDebug() << text.toStdString().c_str(); 

가 예상 결과 생산을?

이 경우 해당 기능에 문제가 있음을 의미합니다. updateDB는 어떻게 보입니까 (함수 서명?)? 그것의 입력은 무엇입니까? Qt는 도움말 파일에서

은 :

유니 코드 데이터는 toUtf8() 함수를 사용하여 8 비트 문자로 변환됩니다.

따라서 위젯 (lineedit)의 로캘이나 부모를 변경하지 않으면 정상적으로 작동하거나 정보 손실이있는 것으로보아야합니다. 나는 문제없이 여러 번이 기능을 사용했습니다 ...

관련 문제