将日志输出管道输出到QTextEdit小部件

时间:2014-03-06 20:15:10

标签: qt qtextedit qiodevice qtextstream

stackoverflow中有一些“类似”的问题,但无法完全实现它们。在pyqt中,我试图将日志文件的输出(实时更新)传递到QTextEdit小部件中。我到目前为止的代码是:

    file = QFile('tmp')
    fh = file.open(QIODevice.ReadOnly)
    stream = QTextStream(file)
    while not stream.atEnd():
        line = stream.readLine()
        self.logTextEdit.append(line)
    file.close()

处理当前内容,但不处理任何后续更改。理想情况下,Qt信号会提醒我读取另一行,因为它可用并直接写入TextEdit。

1 个答案:

答案 0 :(得分:0)

QFile没有提供监控文件内容变化的机制。您需要使用QFileSystemWatcher来获取有关文件更改的通知。您还需要智能地处理可能会在文件末尾读取部分行的事实。

如果您使用fileChanged信号,并确保addPath返回True,请确保提供文件(不是文件夹)的路径。

您可以尝试同时监控文件路径和目录路径 - 在某些系统上,一个系统可以正常工作而另一个系统会失败。

如果您使用的是OS X以外的Unices,您可能只是关闭了文件系统通知守护程序(如果需要),或者关闭了给定文件系统等的通知。正如您所看到的,取决于工作文件系统观察程序充满了危险。如果观察者失败,你必须有一个回调轮询文件大小和修改时间(不经常!)。

附加到QTextEdit的效果相当差。您应该使用模型和QListView代替with some caveats