无法将QString转换为Const Char *

时间:2017-03-19 03:59:45

标签: c++ qt compiler-errors qstring const-char

我是QT的新手所以请原谅我,如果我在这里公然做错了,但是我已经看过这里的所有问题,但似乎找不到有用的东西。我正在尝试让用户通过输入名称来创建文件夹,然后“创建”一个带有名称的文件夹。我说'创建'因为它不是完全创建一个,它在输入名称之前首先将文件夹称为“项目”,当您输入名称时,它会重命名它。但是,当我尝试使用输入的名称重命名文件夹时,它会给我

  

错误:C2664:'int rename(const char *,const char *)':无法转换   参数1从'QString'到'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

        }
    }
}

如果你们能提供帮助,我将不胜感激,我已经坚持了几个小时。

3 个答案:

答案 0 :(得分:2)

你可以调用QString::toStdString(),然后调用c_str()从std :: string中检索const char *。

您的代码看起来像这样:

if (dir.exists()) {
        rename(projectPath.toStdString().c_str(), name);
    }

答案 1 :(得分:0)

尝试dir.rename(dir.dirName(), name);

您正在尝试在没有实例的情况下调用成员函数。

由于rename()QDir的成员函数,因此您需要一个QDir实例才能调用它。因此,您需要rename()而不是仅仅调用调用谁知道什么的dir.rename()

QDir::rename()实际上需要2 QString作为参数,但是你调用的其他函数需要两个原始字符串,所以你真的不需要转换字符串,你只需要调用错误的功能。

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

您最有可能从rename()调用<stdio.h>,这也可以在参数正确并且操作系统可以重命名目录的情况下工作,在这种情况下,您需要转换为&#34 ;原料&#34;通过yourString.toLatin1().constData()的C风格字符串。但是,由于您使用的是Qt,因此您也可以使用QDir API,它直接与QString配合使用。

如果它仍然不起作用,那么您的输入参数是错误的,或者有些东西阻止操作系统重命名目录,例如当前正在使用的文件。

答案 2 :(得分:-1)

Qt FAQ说:

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();
}