首次提交
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
#pragma once
|
||||
#include "../GlobalTypes.h"
|
||||
#include "Core/Base/global_include.h"
|
||||
|
||||
#include <QThread>
|
||||
#include <qrgb.h>
|
||||
|
||||
namespace YSG {
|
||||
class LIB_DECL TimerThread : public QThread {
|
||||
Q_OBJECT
|
||||
public:
|
||||
QList<Plot*> mPlots;
|
||||
TimerThread();
|
||||
void run() override;
|
||||
};
|
||||
|
||||
class LIB_DECL Global : public QObject, public Psc::Singleton<Global> {
|
||||
public:
|
||||
int mTimerId{};
|
||||
QMap<QString, TimerThread*> mTimerThreadMap;
|
||||
int mInterval = 10;
|
||||
void startAllTimeThread();
|
||||
void timerEvent(QTimerEvent *event) override;
|
||||
QVector<QRgb> mColorMap = getTurboColorGradient();
|
||||
};
|
||||
}
|
||||
|
||||
#define QLOG_POS QString(__func__) + QString(" ") + __FILE__ + QString(":") + QString::number(__LINE__)
|
||||
|
||||
|
||||
template<typename, typename = void>
|
||||
struct has_qdebug_stream : std::false_type {};
|
||||
|
||||
template<typename T>
|
||||
struct has_qdebug_stream<T,
|
||||
std::void_t<
|
||||
decltype(
|
||||
std::declval<QDebug&>() << std::declval<T>()
|
||||
)
|
||||
>
|
||||
> : std::true_type {};
|
||||
|
||||
template <typename T>
|
||||
QString to_qstring(const T& value)
|
||||
{
|
||||
using C = std::decay_t<T>;
|
||||
if constexpr (has_qdebug_stream<C>::value)
|
||||
{
|
||||
QString s;
|
||||
QDebug dbg(&s);
|
||||
dbg << value;
|
||||
return s;
|
||||
}
|
||||
else
|
||||
{
|
||||
static_assert(sizeof(C) == 0,
|
||||
"Psc: to_qstring type error");
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
// // 通用模板
|
||||
// template <typename T>
|
||||
// QString to_qstring(const T& value) {
|
||||
// static_assert(std::is_arithmetic<T>::value, "T must be an arithmetic type");
|
||||
// return QString::number(value);
|
||||
// }
|
||||
//
|
||||
// inline QString to_qstring(const char* value) {
|
||||
// return value;
|
||||
// }
|
||||
//
|
||||
// inline QString to_qstring(const QString& value) {
|
||||
// return value;
|
||||
// }
|
||||
|
||||
// 特化模板:处理 bool 类型
|
||||
template <>
|
||||
inline QString to_qstring(const bool& value) {
|
||||
return value ? QStringLiteral("true") : QStringLiteral("false");
|
||||
}
|
||||
#define VAR_QSTR(P) ("[" + to_qstring(#P) + "]:" + to_qstring(P) + to_qstring(", "))
|
||||
#define VAR_QSTR_1(P1) VAR_QSTR(P1)
|
||||
#define VAR_QSTR_2(P1, P2) VAR_QSTR_1(P1) + VAR_QSTR(P2)
|
||||
#define VAR_QSTR_3(P1, P2, P3) VAR_QSTR_2(P1, P2) + VAR_QSTR(P3)
|
||||
#define VAR_QSTR_4(P1, P2, P3, P4) VAR_QSTR_3(P1, P2, P3) + VAR_QSTR(P4)
|
||||
#define VAR_QSTR_5(P1, P2, P3, P4, P5) VAR_QSTR_4(P1, P2, P3, P4) + VAR_QSTR(P5)
|
||||
#define VAR_QSTR_6(P1, P2, P3, P4, P5, P6) VAR_QSTR_5(P1, P2, P3, P4, P5) + VAR_QSTR(P6)
|
||||
#define VAR_QSTR_7(P1, P2, P3, P4, P5, P6, P7) VAR_QSTR_6(P1, P2, P3, P4, P5, P6) + VAR_QSTR(P7)
|
||||
#define VAR_QSTR_8(P1, P2, P3, P4, P5, P6, P7, P8) VAR_QSTR_7(P1, P2, P3, P4, P5, P6, P7) + VAR_QSTR(P8)
|
||||
#define VAR_QSTR_9(P1, P2, P3, P4, P5, P6, P7, P8, P9) VAR_QSTR_8(P1, P2, P3, P4, P5, P6, P7, P8) + VAR_QSTR(P9)
|
||||
#define VAR_QSTR_10(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) VAR_QSTR_9(P1, P2, P3, P4, P5, P6, P7, P8, P9) + VAR_QSTR(P10)
|
||||
|
||||
Reference in New Issue
Block a user