如何指定可以使用QT创建编辑器的文件类型

问题描述 投票:0回答:2

我目前开始开发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扩展名?提前致谢。
c++ qt lua
2个回答
0
投票

[getOpenFileName可以接受更多参数,请参阅文档here

所以您的代码将类似于:

QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
                                            "", //default path here
                                            tr("Lua files (*.lua)"));

0
投票

您可以尝试以下操作: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 C++ files (*.cpp *.cc *.C *.cxx *.c++)");
dialog.setNameFilter("*.cpp *.cc *.C *.cxx *.c++");

来自文档:https://doc.qt.io/qt-5/qfiledialog.html#setNameFilter

© www.soinside.com 2019 - 2024. All rights reserved.