2017-03-19 1 views
-2

저는 QT에 익숙하지 않으므로, 여기에 맹목적으로 뭔가 잘못하고 있다면 실례합니다. 그러나 여기에있는 모든 질문을 보았지만 보일 수는 없습니다. 작동하는 것을 찾아야한다. 사용자가 이름을 입력하여 폴더를 만들도록 시도하고 있으며 이름이있는 폴더를 만듭니다. 나는 이름을 입력하기 전에 정확하게 "프로젝트"라는 폴더를 만들고, 이름을 입력하면 이름을 바꿉니다. 내가 입력 된 이름을 가진 폴더를 시도하고 이름을 바꿀 때, 그것은 여기 나에게QString을 Const Char로 변환 할 수 없습니다. *

error:C2664: 'int rename(const char *,const char *)' : cannot convert argument 1 from 'QString' to 'const char *'

를 제공 내 코드입니다 : 너희들은 도움이 될 수 있다면

void MainWindow::on_actionNew_Project_triggered(const char *parameter) 
{ 
    //Create project folder 
    QString projectPath = "D:/Project"; 

    QDir dir(projectPath); 
     if (!dir.exists()) { 
      dir.mkpath(projectPath); 
    } 


    //Get project name from user 
    bool result; 
    QString name = QInputDialog::getText(0, "New Project", 
              "Enter in project name", QLineEdit::Normal, 
              "", &result); 
    if(result && !name.isEmpty()) { 

    //Rename project folder to user created name 
    QDir dir(projectPath); 
     if (dir.exists()) { 
      rename(projectPath, name); //Gives me error HERE 

     } 
    } 
} 

내가 그것을 감사하겠습니다, 난에 붙어 있었어요 이 시간 동안.

+1

이 질문은 [MCVE] (http://stackoverflow.com/help/mcve)가 포함되어 있지 않습니다. – MrEricSir

+0

컴파일러 오류로 상태가 두 가지'const char *'인수가 필요하지만'projectPath'와'name'은'QString' 유형입니다. 'projectPath.toLatin1(). data()'가 인수로 사용될 수 있습니다. 다음 번에 모든 관련 함수 선언 즉,이 경우 rename 메소드를 포함시켜야 더 빨리 처리 할 수 ​​있습니다. – bkausbk

답변

0

당신은 인스턴스없이 멤버 함수를 호출하려고 dir.rename(dir.dirName(), name);

보십시오.

rename()QDir의 멤버 함수이기 때문에 호출하려면 QDir 인스턴스가 필요합니다. 따라서 누가 무엇을 아는지를 호출하는 rename()을 호출하는 것보다 dir.rename()이 필요합니다.

QDir::rename()은 실제로 매개 변수로 2 QString을 사용하지만 호출하는 다른 함수는 2 개의 원시 문자열을 사용하므로 실제로 문자열을 변환 할 필요가 없으며 잘못된 함수를 호출했습니다.

bool QDir::rename(const QString & oldName, const QString & newName) 

당신은 가장 가능성 또한 매개 변수가 올바른지와 OS는, 디렉토리의 이름을 바꿀 수있는 경우에 당신을 "원시"C 스타일의 문자열을 변환 할 필요가 주어진 일할 수 <stdio.h>에서 rename()을 요구하고있다 yourString.toLatin1().constData()을 통해 하지만 Qt를 사용하고 있기 때문에 API를 사용하면 QString과 직접 연동 할 수 있습니다.

여전히 작동하지 않으면 입력 매개 변수가 잘못되었거나 OS가 디렉토리 이름 (예 : 현재 사용중인 파일)을 바꾸지 못하게합니다.

+0

글쎄, 그게 나에게 오류를 포기하지,하지만 그것은 폴더의 이름을 바꿉니다 – GuyWhoNeedsHelp

+0

@ GuyWhoNeedsHelp - 그건 다른 문제입니다. 이 질문은'QString'을'const char *'로 변환하는 것에 관한 것입니다. 예상대로 작동하지 않으면 코드에 다른 문제가 있습니다. – dtech

+0

Qt뿐만 아니라 일반적으로 C++에 대해서도 배우는 것처럼 보입니다. – dtech

-1

Qt는 질문 말한다 :

int main(int argc, char **argv) 
{ 
QApplication app(argc, argv); 
QString str1 = "Test"; 
QByteArray ba = str1.toLatin1(); 
const char *c_str2 = ba.data(); 
printf("str2: %s", c_str2); 
return app.exec(); 
} 
+0

"오류 : C2039 : 'toAscii': 내가 할 때 'QString'의 멤버가 아닙니다. – GuyWhoNeedsHelp

+1

Qt에 더 이상 toAscii()가 없으므로 toLatin1()이 올바른 기능입니다. – dtech

+0

그래서 섹션 1 아래의 해답을 읽어보십시오. 거기에 말합니다 :'toLatin1();' –

1

QString::toStdString()을 호출 한 다음 c_str()을 호출하여 std :: string에서 const char *를 검색 할 수 있습니다.

코드는 다음과 같을 것이다 :

if (dir.exists()) { 
     rename(projectPath.toStdString().c_str(), name); 
    } 
관련 문제