c++ - 如何防止打开文件两次?

标签 c++ qt qt5

我有一个 Mdi 应用程序
此应用程序允许在 subWindow 中打开文本文件。
问题是您可以多次打开同一个文件。

我使用了以下不完整的代码:

QList<QMdiSubWindow*> subWindows = ui->mdiArea->subWindowList()

但是我怎么知道文件是否存在。

如何防止这种行为?


修改

我已经执行了以下代码,并且工作正常:(请查看代码)

QList <QMdiSubWindow*> subWindows = ui -> mdiArea -> subWindowList();
if (subWindows.count() > 0) {
    for (int i = 0; i < subWindows.count(); i++) {
        if (subWindows.at(i) -> property("filePath").toString() == fileDlg) {
            return;
        }
    }
}

完整代码:

QString fileDlg = QFileDialog::getOpenFileName(this, "Open File", "F://", "Text Files(*.txt)");
if (fileDlg != "") {

    // Start the important code
    QList < QMdiSubWindow * > subWindows = ui -> mdiArea -> subWindowList();
    if (subWindows.count() > 0) {
        for (int i = 0; i < subWindows.count(); i++) {
            if (subWindows.at(i) -> property("filePath").toString() == fileDlg) {
                return;
            }
        }
    }
    // End the important code  

    QString cache;
    QFile file(fileDlg);
    if (file.open(QFile::ReadOnly)) {
        QTextStream in ( & file);
        while (!file.atEnd()) {
            cache = in .readAll();
        }
    }
    file.close();


    QFileInfo finfo(file);
    QWidget * widget = new QWidget(this);
    QTextEdit * TextEdit = new QTextEdit(widget);
    TextEdit -> setObjectName("myTextEdit");
    QMdiSubWindow * mdiWindows = ui -> mdiArea - > addSubWindow(widget);
    mdiWindows -> setProperty("filePath", fileDlg);
    mdiWindows -> setGeometry(5, 5, 300, 250);
    mdiWindows -> setWindowTitle(finfo.baseName());
    mdiWindows -> layout() -> addWidget(TextEdit);
    mdiWindows -> setWindowState(Qt::WindowMaximized);
    mdiWindows -> layout() -> setSpacing(0);
    TextEdit -> setText(cache);
    mdiWindows -> show();
}

最佳答案

根据操作系统的不同,同一个文件可以有多个不同的名称。即使是同一个名字也可以用不同的方式引用(想想遍历目录结构!)。任何纯粹基于名称的方案都注定会失败。

这样做通常非常有用,我经常打开同一个文件多次,在编辑另一个地方的同时查看一个地方。让用户决定。

关于c++ - 如何防止打开文件两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24347229/

相关文章:

c++ - QTPLUGIN,它的用途是什么?

c++ - Qt:更新 QString 时自动生成的代码失败

qml - 如何使用 C++ 实例化一个元素

c++ - 显示 mp3 文件,但使用 QFileDialog 选择文件夹

c++ - 如何通过引用或值返回智能指针(shared_ptr)?

c++ - 正确格式化有错误的数字 (C++)

c++ - STL 迭代器不起作用?不知道为什么

c++ - 在带有 QWinWidget 的 CDialog 上使用托管 Qt 小部件时,键盘输入无法正常工作

c++ - 使用 Qt 从 mysql 查询构建二维 vector

c++ - C++ 中的跨平台 GUI 窗口