2017-03-19 159 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); 
    } 
相关问题