无法将 QString 转换为 Const Char*



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

错误:C2664:"整数重命名(常量字符 *,常量字符 *)":无法转换 参数 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
}
}
}

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

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

您的代码如下所示:

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

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

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

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

QDir::rename()实际上需要 2QStrings 作为参数,但您调用的另一个函数需要两个原始字符串,因此您实际上不需要转换字符串,您只是调用了错误的函数。

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

您很可能从<stdio.h>调用rename(),这也可以工作,因为参数是正确的并且操作系统可以重命名目录,在这种情况下,您需要通过yourString.toLatin1().constData()转换为"原始"C 样式字符串。但是既然你使用的是Qt,你不妨使用QDirAPI,它直接与QString一起工作。

如果它仍然不起作用,则您的输入参数错误,或者存在阻止操作系统重命名目录的内容,例如当前正在使用的文件。

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

最新更新