@samaelka

Как вызывать методы в любом месте программы?

Существует класс который выводить логи действий в QListWidget
log.h
#ifndef LOG_H
#define LOG_H
#include <QtWidgets>

#include "server.h"
#include "database.h"
#include "delegates.h"
class CLog : public QWidget
{
    Q_OBJECT
signals:
    void signalADDlog(const QString&);    // Сигнал для передачи
public:
    explicit CLog(QObject *parent = nullptr);
    QListWidget *p_loglist;
public slots:
    void SlotAddLog (QString in_log);

};

#endif


log.cpp
#include "log.h"
#include "extern.h"
#include <QStringList>

CLog::CLog(QWidget *parent) : QWidget(parent)
{
    p_loglist = new QListWidget();   
    QVBoxLayout *mainLayout = new QVBoxLayout;    
    mainLayout->addWidget(p_loglist);
    setLayout(mainLayout);
     connect(this, &CLog::signalADDlog, this, &CLog::SlotAddLog);

    emit signalADDlog("Start and add fist new log events");
}
void CLog::SlotAddLog (QString in_log)
{
    p_loglist->addItem(in_log);
}


Как мне использовать SlotAddLog в любом другом классе программы?
  • Вопрос задан
  • 146 просмотров
Пригласить эксперта
Ответы на вопрос 2
Создать объект класса CLog и вызывать его сигнал signalADDlog с нужным тестом. Правда, непонятно к чему тут сигнал, если можно вместо него использовать обычный метод.
Ответ написан
@xandox
Есть три способа. Один неудобный, второй плохой, третий кутешный :)

Неудобный: В главном окне как можно раньше создаешь класс CLog и передаешь его инстанс во все места которые могут порождать логи. Нудобство этого метода заключатся в том, что по всюду нужно таскать инстанс логера. По хорошему, сигнал тут и в правду не нужен, достаточно функции, и лучше сделать интерфейс ILog что бы позже подменять реализации, если понадобиться.

Плохой: Сделать CLog синглтоном.

Кутешный: Воспользоваться системой логирования Qt (qDebug, qInfo и т.д.), для этого можно воспользоваться https://doc.qt.io/qt-5/qtglobal.html#qInstallMessa... для перенаправления вывода
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы