无法将 QString 转换为 Const Char*
Can't convert QString to Const Char*
我是 QT 的新手,如果我在这里公然做错了什么,请原谅,但我已经查看了这里关于此事的所有问题,但似乎无法找到有用的东西。我试图让用户通过输入一个名称来创建一个文件夹,并且 'creates' 一个具有该名称的文件夹。我说 'create' 因为它不完全是创建一个,它会在您输入名称之前首先创建一个名为 "project" 的文件夹,并且当您输入名称时它会重命名它。但是,当我尝试使用输入的名称重命名文件夹时,它会给我
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
}
}
}
如果你们能提供帮助,我将不胜感激,我已经坚持了几个小时。
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();
}
尝试dir.rename(dir.dirName(), name);
您正试图在没有实例的情况下调用成员函数。
因为rename()
是QDir
的成员函数,你需要一个QDir
实例来调用它。因此,您需要 dir.rename()
.
而不是仅仅调用 rename()
调用谁知道是什么
QDir::rename()
实际上需要 2 个 QString
作为参数,但是你调用的另一个函数需要两个原始字符串,所以你不需要转换字符串,你只是调用函数错误。
bool QDir::rename(const QString & oldName, const QString & newName)
您很可能是从 <stdio.h>
调用 rename()
,如果参数正确并且 OS 可以重命名目录,这也可以工作,在这种情况下您将需要通过 yourString.toLatin1().constData()
转换为 "raw" C 风格的字符串。但是既然你使用的是 Qt,你还不如使用 QDir
API,它直接与 QString
.
一起工作
如果还是不行,要么是你的输入参数有误,要么是有什么东西阻止了OS重命名目录,例如当前正在使用的文件。
您可以调用 QString::toStdString(), and then call c_str() 从 std::string.
中检索 const char*
您的代码将如下所示:
if (dir.exists()) {
rename(projectPath.toStdString().c_str(), name);
}
我是 QT 的新手,如果我在这里公然做错了什么,请原谅,但我已经查看了这里关于此事的所有问题,但似乎无法找到有用的东西。我试图让用户通过输入一个名称来创建一个文件夹,并且 'creates' 一个具有该名称的文件夹。我说 'create' 因为它不完全是创建一个,它会在您输入名称之前首先创建一个名为 "project" 的文件夹,并且当您输入名称时它会重命名它。但是,当我尝试使用输入的名称重命名文件夹时,它会给我
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
}
}
}
如果你们能提供帮助,我将不胜感激,我已经坚持了几个小时。
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();
}
尝试dir.rename(dir.dirName(), name);
您正试图在没有实例的情况下调用成员函数。
因为rename()
是QDir
的成员函数,你需要一个QDir
实例来调用它。因此,您需要 dir.rename()
.
rename()
调用谁知道是什么
QDir::rename()
实际上需要 2 个 QString
作为参数,但是你调用的另一个函数需要两个原始字符串,所以你不需要转换字符串,你只是调用函数错误。
bool QDir::rename(const QString & oldName, const QString & newName)
您很可能是从 <stdio.h>
调用 rename()
,如果参数正确并且 OS 可以重命名目录,这也可以工作,在这种情况下您将需要通过 yourString.toLatin1().constData()
转换为 "raw" C 风格的字符串。但是既然你使用的是 Qt,你还不如使用 QDir
API,它直接与 QString
.
如果还是不行,要么是你的输入参数有误,要么是有什么东西阻止了OS重命名目录,例如当前正在使用的文件。
您可以调用 QString::toStdString(), and then call c_str() 从 std::string.
中检索 const char*您的代码将如下所示:
if (dir.exists()) {
rename(projectPath.toStdString().c_str(), name);
}