Не могу преобразовать 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

}
}
}

Я был бы признателен, если бы вы, ребята, могли помочь, я застрял на этом часами.

-2

Решение

Пытаться 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>, что также может работать, учитывая, что параметры верны и ОС может переименовать каталог, в этом случае вам нужно будет преобразовать в «сырые» строки в стиле C через yourString.toLatin1().constData(), Но так как вы используете Qt, вы можете также использовать QDir API, который работает напрямую с QString,

Если это все еще не работает, то либо ваши входные параметры неверны, либо что-то мешает ОС переименовать каталог, например файл, используемый в настоящее время.

0

Другие решения

Вы могли бы позвонить QString :: toStdString (), а затем позвоните c_str () получить const char * из std :: string.

Ваш код будет выглядеть примерно так:

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

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();
}
-1
А ты уже прошел курс программирования? Супер скидка!
Прокачать скилл $$$
×