2017-03-19 202 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 *'參數,但是您的'projectPath'和'name'類型爲'QString'。 'projectPath.toLatin1()。data()'可以用作參數。下次你應該包括所有相關的函數聲明,即在這種情況下你的'rename'方法,以便能夠更快地幫助你。 – bkausbk

回答

0

嘗試dir.rename(dir.dirName(), name);

您試圖調用一個成員函數沒有一個實例。

由於rename()QDir的成員函數,因此您需要一個QDir實例才能調用它。因此,而不是隻調用rename()哪些調用誰知道什麼,您需要dir.rename()

QDir::rename()實際上需要2 QString s作爲參數,但是您調用的其他函數需要兩個原始字符串,因此您並不需要轉換字符串,而只是調用了錯誤的函數。

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

你最有可能調用rename()<stdio.h>,這也可以工作給出的參數是正確的,OS可以重命名的目錄,在這種情況下,你將需要轉換爲「原始」 C風格的字符串通過yourString.toLatin1().constData()。但是,既然你使用的是Qt,那麼你可以使用QDir API,它可以直接與QString一起工作。

如果它仍然不起作用,那麼您的輸入參數是錯誤的,或者有阻止操作系統重命名目錄的東西,例如當前正在使用的文件。

+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

因此,在下面的答案中,我試着在下面說:'toLatin1();' –

1

你可以調用QString::toStdString(),然後調用c_str()從std :: string中檢索const char *。

您的代碼將是這個樣子:

if (dir.exists()) { 
     rename(projectPath.toStdString().c_str(), name); 
    } 
相關問題