DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
DAMessageLogsModel.h
1#ifndef DAMESSAGELOGSMODEL_H
2#define DAMESSAGELOGSMODEL_H
3#include "DAGuiAPI.h"
4#include <QAbstractTableModel>
5#include <QSortFilterProxyModel>
6#include "DAMessageQueueProxy.h"
7#ifndef DA_ROLE_MESSAGE_TYPE
11#define DA_ROLE_MESSAGE_TYPE (Qt::UserRole + 1)
12#endif
13
14namespace DA
15{
16class DAMessageLogItem;
17DA_IMPL_FORWARD_DECL(DAMessageLogsModel)
21class DAGUI_API DAMessageLogsModel : public QAbstractTableModel
22{
23 Q_OBJECT
24 DA_IMPL(DAMessageLogsModel)
25public:
26 DAMessageLogsModel(QObject* p = nullptr);
28
29 QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
30 int columnCount(const QModelIndex& parent = QModelIndex()) const override;
31 int rowCount(const QModelIndex& parent = QModelIndex()) const override;
32 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
33 Qt::ItemFlags flags(const QModelIndex& index) const override;
34 bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override;
35 //获取内部维护的DAMessageQueueProxy
36 const DAMessageQueueProxy& messageQueueProxy() const;
37 DAMessageQueueProxy& messageQueueProxy();
38
39public:
40 //是否显示时间列
41 void setShowDateTime(bool on = true);
42 //是否显示时间
43 bool isShowDateTime() const;
44 //设置不同消息类型的背景颜色
45 void setTypeBackgroundColor(QtMsgType type, const QColor& clr);
46 //清空所有,此操作会把所有消息队列里的消息清空
47 void clearAll();
48private slots:
49 //有消息插入触发的槽
50 void onMessageAppended();
51 void onMessageQueueSizeChanged(int newSize);
52
53protected:
54 virtual QVariant dataDisplay(DAMessageLogItem* item, const QModelIndex& index) const;
55 virtual QVariant dataDecoration(DAMessageLogItem* item, const QModelIndex& index) const;
56 virtual QVariant dataBackground(DAMessageLogItem* item, const QModelIndex& index) const;
57 virtual QVariant dataToolTip(DAMessageLogItem* item, const QModelIndex& index) const;
58};
59
63class DAGUI_API DAMessageLogsSortFilterProxyModel : public QSortFilterProxyModel
64{
65 Q_OBJECT
66public:
71 {
72 AcceptDebugMsg = 0x01,
73 AcceptWarningMsg = 0x02,
74 AcceptCriticalMsg = 0x04,
75 AcceptFatalMsg = 0x08,
76 AcceptInfoMsg = 0x10,
77 AcceptAll = 0x1F
78 };
79 Q_ENUM(AcceptMessageType)
80 Q_DECLARE_FLAGS(AcceptMessageTypeFlags, AcceptMessageType)
81public:
82 DAMessageLogsSortFilterProxyModel(QObject* p = nullptr);
84 bool filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const override;
85
86public:
87 //设置flag
88 void setAcceptMessageTypeFlag(AcceptMessageType t, bool on);
89 //检测AcceptMessageType是否配置
90 bool testAcceptMessageTypeFlag(AcceptMessageType t) const;
91 //判断消息类型是否符合当前的过滤类型,如果符合,则接受这个消息
92 bool isQtMsgTypeMatchAcceptType(int msgtype) const;
93
94private:
95 AcceptMessageTypeFlags _acceptsType;
96};
97} // namespace DA
98#endif // DAMESSAGELOGSMODEL_H
包含了一个信息的所有内容
Definition DAMessageLogItem.h:13
用于显示全局消息的model
Definition DAMessageLogsModel.h:22
对message的SortFilterProxyModel,用于进行消息过滤
Definition DAMessageLogsModel.h:64
AcceptMessageType
定义接受的消息类型
Definition DAMessageLogsModel.h:71
这是一个全局的日志队列,所有的qdebug相关的消息都会推入这个队列中
Definition DAMessageQueueProxy.h:21
序列化类都是带异常的,使用中需要处理异常
Definition AppMainWindow.cpp:44