我应该使用哪个Qt小部件来显示消息?

26

QStatusBar每次只有一行,我无法跟踪历史记录或将历史记录保存在日志文件中。

因此,我希望在我的主窗口中有一个dock小部件,能够以多行和自动滚动的方式显示我需要的消息,并自动保存到日志文件中。

我的问题是如何在Qt中实现这个功能?


你需要编写自己的小部件,可以先阅读文档或者参考Qt教程。 - user1006989
2
你可以使用 setReadOnly(true) 方法来将 QTextEdit 设置为只读模式。 - Archie
1个回答

36
如果你寻找的是类似于QtCreator中“应用程序输出”窗格的东西,那么一个简单的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(),即可自动显示、滚动和保存日志。


哇,好的我会尝试一下。顺便问一下,你们参加过任何课程吗?还是只是通过阅读手册学习Qt的呢?为什么你们了解它们得那么好? :) - Daniel
3
在我的情况下,它始于很久以前的阅读手册和教程。再加上十多年的经验和与Qt专业工作,这就给了我更深入的框架知识。Qt是开源的(Qt Creator也是如此),所以如果你想知道某些东西是如何工作的,可以打开源代码并进行深入挖掘。 - Fred
3
我四年前开始接触Qt,阅读了一本名为《C++ GUI Programming with Qt4》的书籍。我从头到尾阅读了这本书,然后试着运行了Qt配套的许多教程和演示程序。之后,我开始为我的工作进行实际编码,至今已经写了大约20万行代码,自学自己在不断进步。因此,我会查看stackoverflow上的每一个Qt相关问题,以便于学习新知识。 - drescherjm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接