2017-03-19 77 views
-2

QTが新しくなったので、ここで何か間違ったことをしていると私は失礼ですが、ここではすべての質問を見てきましたが、見えません動作するものを見つけること。私は、ユーザーに名前を入力してフォルダを作成させようとしています。名前を持つフォルダを作成しています。名前を入力する前にフォルダを最初に "project"という名前にし、名前を入力すると名前を変更します。しかし、私はそれがここに私のコードです私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 *'引数が2つ必要ですが、 '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

私は "error: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); 
    } 
関連する問題