Как указать, какие типы файлов вы можете открыть - PullRequest
0 голосов
/ 03 ноября 2019

В настоящее время я начинаю разрабатывать настольное приложение QT, чтобы редактировать язык сценариев "Lua". Реализация должна быть довольно простой, открывая файлы расширения Lua, сохраняя и редактируя их. Проблема, с которой я столкнулся, заключается в том, что я хочу иметь возможность открывать / сохранять / редактировать только файлы Lua. Читая документацию по QT, я наткнулся на объяснение того, как вы можете открывать файлы для так называемого редактора «Блокнот». Они предоставили следующий пример кода:

QString fileName = QFileDialog::getOpenFileName(this, "Open the file");
QFile file(fileName);
currentFile = fileName;
if (!file.open(QIODevice::ReadOnly | QFile::Text)) {
    QMessageBox::warning(this, "Warning", "Cannot open file: " + file.errorString());
    return;
}
setWindowTitle(fileName);
QTextStream in(&file);
QString text = in.readAll();
ui->textEdit->setText(text);
file.close();

Таким образом, здесь они в основном добавляют условие, при котором файл не может быть открыт (это было в этой строке кода if (!file.open(QIODevice::ReadOnly | QFile::Text))), но они не указываюткак должно выглядеть условие, если я хочу иметь возможность открывать определенные типы файлов (в моем случае, файлы lua). То же самое касается опции «сохранить», которую они отобразили. Поэтому мой вопрос: как мне расширить это условие, чтобы проверить, имеет ли файл заданный тип расширения для Lua? Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 03 ноября 2019

getOpenFileName может принимать больше аргументов (имеет значения по умолчанию для некоторых аргументов), см. Документацию здесь .

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

QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
                                            "", //default path here
                                            tr("Lua files (*.lua)"));
0 голосов
/ 03 ноября 2019

Вы можете попробовать это: void QFileDialog :: setNameFilter (const QString & filter)

Устанавливает фильтр, используемый в диалоговом окне файла, для данного фильтра.

/* If filter contains a pair of parentheses containing one or 
more filename-wildcard patterns, separated by spaces, then 
only the text contained in the parentheses is used as the filter. 
This means that these calls are all equivalent: */

dialog.setNameFilter("All Lua files (*.lua)");

Взято из документов: https://doc.qt.io/qt-5/qfiledialog.html#setNameFilter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...