qt/LedOK/gutil/qcore.h

68 lines
2.4 KiB
C
Raw Permalink Normal View History

2023-04-18 14:14:46 +08:00
#ifndef QCORE_H
#define QCORE_H
2025-12-30 17:22:43 +08:00
2023-09-19 11:49:20 +08:00
#include <QEventLoop>
2025-12-30 17:22:43 +08:00
#include <QProcess>
#include <QThread>
2023-09-19 11:49:20 +08:00
#include <QTimer>
2026-01-28 15:44:41 +08:00
#include "windows.h"
2023-09-19 11:49:20 +08:00
#define ToStr QString::number
inline QString toStr(int num, int base=10) {return QString::number(num, base);}
inline QString toStr(uint num, int base=10) {return QString::number(num, base);}
inline QString toStr(long num, int base=10) {return QString::number(num, base);}
inline QString toStr(ulong num, int base=10) {return QString::number(num, base);}
inline QString toStr(qlonglong num, int base=10) {return QString::number(num, base);}
inline QString toStr(qulonglong num, int base=10) {return QString::number(num, base);}
inline QString toStr(double num, char format='g', int precision=6) {return QString::number(num, format, precision);}
inline QString gUrlSuffix(const QString &url, int size, bool withDot = false) {
auto ss = url.lastIndexOf('/')+1;
if(ss==url.size()) return QString();
ss++;
auto ee = url.indexOf('?', ss);
if(ee==-1) ee = url.size();
int end = ee-size-1;
if(end<ss) end = ss;
for(int i=ee-1; i>=end; --i) if(url[i]=='.') return withDot ? url.mid(i, ee-i) : url.mid(i+1, ee-i-1);
return QString();
}
2023-04-18 14:14:46 +08:00
inline QString byteSizeStr(double size) {
2024-01-28 20:28:02 +08:00
const char *units[]{"B", "KB", "MB", "GB", "TB", "PB", "EB"};
2023-04-18 14:14:46 +08:00
auto i = 0;
2024-01-28 20:28:02 +08:00
for(; size >= 1024 && i < 7; i++) size /= 1024;
return (size > 99 ? QString::number(size, 'f', 0) : QString::number(size, 'g', 3))+" "+units[i];
2023-04-18 14:14:46 +08:00
}
2025-05-06 18:28:05 +08:00
inline int wait(int msec, QObject *context = 0, QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents) {
2023-09-19 11:49:20 +08:00
QEventLoop loop;
2025-05-06 18:28:05 +08:00
QTimer::singleShot(msec, &loop, &QEventLoop::quit);
if(context) QObject::connect(context, &QObject::destroyed, &loop, [&] {
loop.exit(1);
});
return loop.exec(flags);
2023-04-18 14:14:46 +08:00
}
2025-12-30 17:22:43 +08:00
inline void OpenCMD(const QStringList &arguments) {
QProcess process;
process.setCreateProcessArgumentsModifier([](QProcess::CreateProcessArguments *args) {
args->flags |= CREATE_NEW_CONSOLE;
args->startupInfo->dwFlags &= ~STARTF_USESTDHANDLES;
});
process.setProgram("cmd");
process.setArguments(arguments);
process.startDetached();
}
2023-04-18 14:14:46 +08:00
template <typename Func>
inline QThread *ThreadStart(Func &&f) {
2026-01-28 15:44:41 +08:00
auto thread = QThread::create(f);
2023-04-18 14:14:46 +08:00
QObject::connect(thread, &QThread::finished, thread, &QThread::deleteLater);
thread->start();
return thread;
}
#endif