QStatusBar每次只有一行,我无法跟踪历史记录或将历史记录保存在日志文件中。
因此,我希望在我的主窗口中有一个dock小部件,能够以多行和自动滚动的方式显示我需要的消息,并自动保存到日志文件中。
我的问题是如何在Qt中实现这个功能?
QStatusBar每次只有一行,我无法跟踪历史记录或将历史记录保存在日志文件中。
因此,我希望在我的主窗口中有一个dock小部件,能够以多行和自动滚动的方式显示我需要的消息,并自动保存到日志文件中。
我的问题是如何在Qt中实现这个功能?
QPlainTextEdit
就可以胜任。如果你不希望用户能够编辑其内容(即只有你的应用程序能够写入它),则可以调用QPlainTextEdit::setReadOnly(true)
函数。#include <QCoreApplication>
class MyLogWindow : public QPlainTextEdit
{
Q_OBJECT
/* snip */
public:
void appendMessage(const QString& text);
private:
QFile m_logFile;
};
void MyLogWindow::appendMessage(const QString& text)
{
this->appendPlainText(text); // Adds the message to the widget
this->verticalScrollBar()->setValue(this->verticalScrollBar()->maximum()); // Scrolls to the bottom
m_logFile.write(text); // Logs to file
// optional if you want to see the changes
// after appendPlainText() immediately
// useful if you use this->appendMessage() in a loop
QCoreApplication::processEvents();
}
我留给你处理样板文件(打开和关闭文件、处理换行符等)的问题。
现在,只需将MyLogWindow
的实例放置在QMainWindow
的停靠区中,并在每次需要记录日志时调用MyLogWindow::appendMessage()
,即可自动显示、滚动和保存日志。