Devel #56
@@ -1,15 +1,34 @@
|
||||
#include "devtoolsplugin.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include <QDebug>
|
||||
#include <QDir>
|
||||
#include <QCoreApplication>
|
||||
#include <QLocale>
|
||||
#include <QMenu>
|
||||
#include <QAction>
|
||||
|
||||
#include "mainwindow.h"
|
||||
|
||||
#include "logmodel.h"
|
||||
#include "logdialog.h"
|
||||
|
||||
std::shared_ptr<LogModel> model;
|
||||
QtMessageHandler previousHandler;
|
||||
|
||||
void myMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &message)
|
||||
{
|
||||
previousHandler(type, context, message);
|
||||
|
||||
if(!model)
|
||||
model = std::make_shared<LogModel>();
|
||||
model->log(type, context.file, context.line, context.function, context.category, message);
|
||||
}
|
||||
|
||||
void registerMessageHandler()
|
||||
{
|
||||
qDebug() << "called";
|
||||
previousHandler = qInstallMessageHandler(myMessageHandler);
|
||||
}
|
||||
|
||||
Q_COREAPP_STARTUP_FUNCTION(registerMessageHandler)
|
||||
@@ -36,5 +55,7 @@ DevToolsPlugin::DevToolsPlugin(QObject *parent) :
|
||||
|
||||
void DevToolsPlugin::attachTo(MainWindow &mainWindow)
|
||||
{
|
||||
//TODO
|
||||
auto dialog = new LogDialog(&mainWindow);
|
||||
dialog->setModel(model.get());
|
||||
mainWindow.menuTools()->addAction(tr("Show log"), dialog, &QDialog::open);
|
||||
}
|
||||
|
@@ -14,11 +14,16 @@ DEPENDPATH += $$PWD/../../zeiterfassungcorelib $$PWD/../../zeiterfassungguilib
|
||||
|
||||
DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT
|
||||
|
||||
HEADERS += devtoolsplugin.h
|
||||
HEADERS += devtoolsplugin.h \
|
||||
logmodel.h \
|
||||
logdialog.h
|
||||
|
||||
SOURCES += devtoolsplugin.cpp
|
||||
SOURCES += devtoolsplugin.cpp \
|
||||
logmodel.cpp \
|
||||
logdialog.cpp
|
||||
|
||||
FORMS +=
|
||||
FORMS += \
|
||||
logdialog.ui
|
||||
|
||||
RESOURCES +=
|
||||
|
||||
|
19
plugins/devtoolsplugin/logdialog.cpp
Normal file
19
plugins/devtoolsplugin/logdialog.cpp
Normal file
@@ -0,0 +1,19 @@
|
||||
#include "logdialog.h"
|
||||
#include "ui_logdialog.h"
|
||||
|
||||
LogDialog::LogDialog(QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::LogDialog)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
}
|
||||
|
||||
LogDialog::~LogDialog()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void LogDialog::setModel(QAbstractItemModel *model)
|
||||
{
|
||||
ui->treeView->setModel(model);
|
||||
}
|
24
plugins/devtoolsplugin/logdialog.h
Normal file
24
plugins/devtoolsplugin/logdialog.h
Normal file
@@ -0,0 +1,24 @@
|
||||
#ifndef LOGDIALOG_H
|
||||
#define LOGDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
class QAbstractItemModel;
|
||||
|
||||
namespace Ui { class LogDialog; }
|
||||
|
||||
class LogDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit LogDialog(QWidget *parent = 0);
|
||||
~LogDialog();
|
||||
|
||||
void setModel(QAbstractItemModel *model);
|
||||
|
||||
private:
|
||||
Ui::LogDialog *ui;
|
||||
};
|
||||
|
||||
#endif // LOGDIALOG_H
|
67
plugins/devtoolsplugin/logdialog.ui
Normal file
67
plugins/devtoolsplugin/logdialog.ui
Normal file
@@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>LogDialog</class>
|
||||
<widget class="QDialog" name="LogDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Log</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout" stretch="1,0">
|
||||
<item>
|
||||
<widget class="QTreeView" name="treeView"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Close</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>LogDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>LogDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
70
plugins/devtoolsplugin/logmodel.cpp
Normal file
70
plugins/devtoolsplugin/logmodel.cpp
Normal file
@@ -0,0 +1,70 @@
|
||||
#include "logmodel.h"
|
||||
|
||||
LogModel::LogModel(QObject *parent) :
|
||||
QAbstractListModel(parent)
|
||||
{
|
||||
}
|
||||
|
||||
void LogModel::log(QtMsgType type, const char *fileName, int lineNumber, const char *functionName, const char *categoryName, const QString &message)
|
||||
{
|
||||
beginInsertRows(QModelIndex(), m_entries.count(), m_entries.count());
|
||||
m_entries.append(Entry { QDateTime::currentDateTime(), type, fileName, lineNumber, functionName, categoryName, message });
|
||||
endInsertRows();
|
||||
}
|
||||
|
||||
int LogModel::rowCount(const QModelIndex &parent) const
|
||||
{
|
||||
Q_UNUSED(parent)
|
||||
return m_entries.count();
|
||||
}
|
||||
|
||||
int LogModel::columnCount(const QModelIndex &parent) const
|
||||
{
|
||||
Q_UNUSED(parent)
|
||||
return 4;
|
||||
}
|
||||
|
||||
QVariant LogModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
Q_ASSERT(index.row() < m_entries.count());
|
||||
const auto &entry = m_entries.at(index.row());
|
||||
|
||||
switch(role)
|
||||
{
|
||||
case Qt::DisplayRole:
|
||||
case Qt::EditRole:
|
||||
switch(index.column())
|
||||
{
|
||||
case 0: return entry.type;
|
||||
case 1: return entry.dateTime.toString(QStringLiteral("dd.MM.yyyy HH:mm:ss.zzz"));
|
||||
case 2: return entry.functionName;
|
||||
case 3: return entry.message;
|
||||
}
|
||||
}
|
||||
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
QVariant LogModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||
{
|
||||
switch(orientation)
|
||||
{
|
||||
case Qt::Horizontal:
|
||||
switch(role)
|
||||
{
|
||||
case Qt::DisplayRole:
|
||||
case Qt::EditRole:
|
||||
switch(section)
|
||||
{
|
||||
case 0: return tr("Type");
|
||||
case 1: return tr("Timestamp");
|
||||
case 2: return tr("Function");
|
||||
case 3: return tr("Message");
|
||||
}
|
||||
}
|
||||
default:
|
||||
qt_noop();
|
||||
}
|
||||
|
||||
return QVariant();
|
||||
}
|
39
plugins/devtoolsplugin/logmodel.h
Normal file
39
plugins/devtoolsplugin/logmodel.h
Normal file
@@ -0,0 +1,39 @@
|
||||
#ifndef LOGMODEL_H
|
||||
#define LOGMODEL_H
|
||||
|
||||
#include <QAbstractListModel>
|
||||
#include <QDateTime>
|
||||
#include <qlogging.h>
|
||||
#include <QList>
|
||||
|
||||
class LogModel : public QAbstractListModel
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit LogModel(QObject *parent = Q_NULLPTR);
|
||||
|
||||
void log(QtMsgType type, const char *fileName, int lineNumber, const char *functionName, const char *categoryName, const QString &message);
|
||||
|
||||
// QAbstractItemModel interface
|
||||
int rowCount(const QModelIndex &parent) const Q_DECL_OVERRIDE;
|
||||
int columnCount(const QModelIndex &parent) const Q_DECL_OVERRIDE;
|
||||
QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE;
|
||||
QVariant headerData(int section, Qt::Orientation orientation, int role) const Q_DECL_OVERRIDE;
|
||||
|
||||
private:
|
||||
struct Entry
|
||||
{
|
||||
QDateTime dateTime;
|
||||
QtMsgType type;
|
||||
const char *fileName;
|
||||
int lineNumber;
|
||||
const char *functionName;
|
||||
const char *categoryName;
|
||||
QString message;
|
||||
};
|
||||
|
||||
QList<Entry> m_entries;
|
||||
};
|
||||
|
||||
#endif // LOGMODEL_H
|
Reference in New Issue
Block a user