【问题标题】:Read and write files in Qt C++在 Qt C++ 中读写文件
【发布时间】:2012-10-14 14:18:22
【问题描述】:

我是 Qt 编程的新手。

我正在做一个由一个主屏幕和 3 个窗口组成的程序,它基于驾驶由并口控制的卡车无线电。

我的问题是,在第二个窗口中,我输入了某些值,并存储在一个 txt 文件中(我检查并正确存储)。问题是当我进入第三个窗口时,该窗口旨在读取和打印数据生成文件,并没有出现,但直到我离开并重新进入程序。

虽然保存数据后,我关闭了文件,然后打开读取它,就像当时没有关闭,但只有在我退出程序时。

下面附加的程序文件。

Link!

非常感谢你,对不起我的英语!

注意:不要忘记以用户权限进入以运行程序(在 Ubuntu 中工作),因为它处理 PC 端口。

【问题讨论】:

  • Mhhhh... 你可以尝试强制文件在关闭前刷新吗?
  • close() 自动刷新文件,无需同时调用。
  • 我的猜测是,您的所有窗口都是在应用程序启动时创建的,而您的第三个窗口会立即读取文件。第二个窗口有时会稍后写入文件。您是否在调试器中运行应用程序并检查写入和读取是否按照您认为发生的顺序发生?
  • 感谢您的回复! Roku:如何在保存文件后更新第三个窗口?
  • 嗯,有很多方法。如果您在应用程序启动时创建所有窗口,则可以使用 Qt 的信号和槽机制。向第二个窗口发出一个 fileChanged 信号,向第三个窗口发出一个 onFileChanged 插槽。然后将信号连接到插槽。当第二个窗口更改了文件时,它会发出 fileChanged 信号。第三个窗口的槽被调用,它可以读取文件。

标签: c++ file qt


【解决方案1】:

来自this qt 示例:

bool MainWindow::saveFile(const QString &fileName)
{
    QFile file(fileName);
    if (!file.open(QFile::WriteOnly | QFile::Text)) 
    {
            QMessageBox::warning(this, tr("Application"),
                          tr("Cannot write file %1:\n%2.")
                          .arg(fileName)
                          .arg(file.errorString()));
        return false;
    }

    QTextStream out(&file);
#ifndef QT_NO_CURSOR
QApplication::setOverrideCursor(Qt::WaitCursor);
#endif
out << textEdit->toPlainText();
#ifndef QT_NO_CURSOR
QApplication::restoreOverrideCursor();
#endif

    setCurrentFile(fileName);
    statusBar()->showMessage(tr("File saved"), 2000);
    return true;
}

您可以定义它并定义一个向用户询问文件名的槽(QFileDialog 是最快的方法),如果用户接受(不取消保存数据执行),则使用用户文件名调用此方法。您可以删除一些东西,即 statusBar()->showMessage();如果你没有状态栏等等...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 2010-09-22
    • 2011-11-23
    相关资源
    最近更新 更多