Я новичок в 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
}
}
}
Я был бы признателен, если бы вы, ребята, могли помочь, я застрял на этом часами.
Пытаться 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
,
Если это все еще не работает, то либо ваши входные параметры неверны, либо что-то мешает ОС переименовать каталог, например файл, используемый в настоящее время.
Вы могли бы позвонить QString :: toStdString (), а затем позвоните c_str () получить const char * из std :: string.
Ваш код будет выглядеть примерно так:
if (dir.exists()) {
rename(projectPath.toStdString().c_str(), name);
}
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();
}