Какой виджет qt следует использовать для отображения сообщений?

QStatusBar имеет только одну строку каждый раз, и я не могу отследить историю или сохранить историю в файле журнала.

Поэтому я хочу, чтобы в моем главном окне был виджет-док, способный отображать нужные мне сообщения многострочным и автоматическим способом прокрутки, а затем автоматически сохраняться в файле журнала.

У меня вопрос, как это сделать в Qt?

Ответ 1

Если вы ищете что-то похожее на панель "Вывод приложения" в QtCreator, тогда простой QPlainTextEdit может сделать эту работу. Вы можете позвонить в QPlainTextEdit::setReadOnly(true), если не хотите, чтобы пользователь мог редактировать его содержимое (т.е. только ваше приложение может писать в него).

Если вы хотите автоматическую прокрутку и автоматическое сохранение в файл журнала, вам нужно будет создать его подкласс. Вот кое-что для начала:

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
}

Я оставляю вам право разбираться в шаблоне (открывать и закрывать файл, работать с новыми строками и т.д.).

Теперь просто поместите экземпляр MyLogWindow в док-станцию в QMainWindow и вызывайте MyLogWindow::appendMessage() каждый раз, когда вам нужно зарегистрировать что-либо, чтобы оно отображалось, прокручивалось и сохранялось автоматически.