Commit 93eaa256 authored by captainwong's avatar captainwong

add module qt

parent 14d30713
...@@ -5,12 +5,6 @@ ...@@ -5,12 +5,6 @@
namespace jlib { namespace jlib {
/**
* @breif �ж�T���͵�����C�Ƿ����ʵ��T
* @param c T���͵�����
* @param t T���͵�ʵ��
* @return bool �Ƿ����
*/
template <class C, class T> template <class C, class T>
inline bool is_contain(const C& c, const T& t) { inline bool is_contain(const C& c, const T& t) {
for (const auto& i : C) { for (const auto& i : C) {
...@@ -20,12 +14,6 @@ inline bool is_contain(const C& c, const T& t) { ...@@ -20,12 +14,6 @@ inline bool is_contain(const C& c, const T& t) {
} }
/**
* @brief ������ͬ���͵�����ʵ��All��Sub��All����Sub����ȡAll�з�Sub������Ԫ�ؼ���
* @param All ȫ��
* @param Sub �Ӽ�
* @return All�з�Sub������Ԫ�ؼ���
*/
template <class C> template <class C>
inline typename C get_other(const C & All, const C& Sub) { inline typename C get_other(const C & All, const C& Sub) {
typename C res, tmp; typename C res, tmp;
......
#pragma once
#include <QDebug>
#ifdef _WIN32
#include <Windows.h>
#endif //_WIN32
#define QDEBUG_FILE_LINE_STREAM "[" << __FUNCTION__ << "ln" << __LINE__ << "]: "
#define QDEBUG_FILE_LINE_VER (QString("[") + __FUNCTION__ + " ln" + QString::number(__LINE__) + "]: ")
#define MYQDEBUG qDebug() << QDEBUG_FILE_LINE_STREAM
#define MYQWARN qWarning() << QDEBUG_FILE_LINE_STREAM
#define MYQCRITICAL qCritical() << QDEBUG_FILE_LINE_STREAM
\ No newline at end of file
#pragma once
#include <QDir>
#include <QApplication>
#include <QString>
#include <QDateTime>
namespace jlib {
namespace qt {
static const auto FILE_TIME_FORMAT = "yyyy-MM-dd_hh-mm-ss";
struct PathHelper
{
static inline bool mkpath(const QString& path) {
QDir dir;
return dir.exists(path) ? true : dir.mkpath(path);
}
static inline QString program() {
struct Helper {
Helper() {
QDir dir(qApp->applicationDirPath());
dir.cdUp();
path = dir.absolutePath();
}
QString path = {};
};
static Helper helper;
return helper.path;
}
static inline QString bin() {
return program() + "/bin";
}
static inline QString log() {
return program() + "/log";
}
static inline QString sdk() {
return program() + "/sdks";
}
static inline QString data() {
return program() + "/data";
}
static inline QString config() {
return data() + "/config";
}
static inline QString db() {
return data() + "/db";
}
static inline QString pic() {
return data() + "/pic";
}
static inline QString rec() {
return data() + "/rec";
}
static inline QString currentTimeString() {
return QDateTime::currentDateTime().toString(FILE_TIME_FORMAT);
}
};
struct AutoSwithToBin {
AutoSwithToBin() {}
AutoSwithToBin(const QString& path) {
QDir().setCurrent(path);
}
~AutoSwithToBin() {
QDir().setCurrent(PathHelper::bin());
}
};
} // end of namespace qt
} // end of namespace jlib
#pragma once
#include <QString>
#include <QColor>
namespace jlib {
namespace qt {
namespace def_sizes {
static const int window_width = 646;
static const int window_height = 424;
static const int title_height = 54;
static const int content_height = window_height - title_height;
static const int control_height = 24;
static const int big_window_width = 1022;
static const int big_window_height = 670;
static const int big_content_height = big_window_height - title_height;
static const int device_view_width = 306;
static const int device_view_height = 236;
} // namespace def_sizes
namespace def_colors {
// 0x202224
static const auto window_bk = QColor(0x202224);
// 0x2c2d30
static const auto control_bk = QColor(0x2c2d30);
// 0x26272a
static const auto control_bk2 = QColor(0x26272a);
// 0x313235
static const auto control_bk_suspend = QColor(0x313235);
// 0x424446
static const auto control_bk_unknown = QColor(0x424446);
// 0xd7d5d5
static const auto unknown_trans = QColor(0xd7d5d5);
// 0xfd8b30
static const auto control_text_font = QColor(0xfd8b30);
// 0xb0afaf
static const auto icon_text_color = QColor(0xb0afaf);
// 0xfe3e3e
static const auto hint_color = QColor(0xfe3e3e);
// 0xa8a9a9
static const auto edit_color = QColor(0xa8a9a9);
// 0x626466
static const auto bg_normal = QColor(0x626466);
// 0x727476
static const auto bg_suspend = QColor(0x727476);
// 0xbbbbbb
static const auto font_normal = QColor(0xbbbbbb);
// 0xf1f1f1
static const auto font_suspend = QColor(0xf1f1f1);
// 0x838383
static const auto font_normal2 = QColor(0x838383);
// 0xaaaaaa
static const auto font_normal3 = QColor(0xaaaaaa);
// 0x929292
static const auto font_normal4 = QColor(0x929292);
// 0x1a1a1a
static const auto ptz_border = QColor(0x1a1a1a);
// 0x2d2e31
static const auto ptz_back = QColor(0x2d2e31);
} // namespace def_colors
namespace def_font_families {
static const char* const yahei = "Microsoft YaHei";
} // namespace def_font_families
inline QString color_value_to_string(int value) {
auto s = QString::number(value, 16);
if (s.length() == 1) { s += "0"; }
return s;
}
inline QString color_to_string_16(QColor color) {
return color_value_to_string(color.red()) + color_value_to_string(color.green()) + color_value_to_string(color.blue());
}
// background:[style];
inline QString build_bg_style(QString style = "transparent") {
return QString("background:") + style + QString(";");
}
// color:#[color];
inline QString build_color_style(QColor color) {
return QString("color:#") + color_to_string_16(color) + QString(";");
}
// background-color:#[color];
inline QString build_bgcolor_style(QColor bgcolor) {
return QString("background-color:#") + color_to_string_16(bgcolor) + QString(";");
}
// background-color:rgba([r],[g],[b],[a]%);
inline QString build_bgcolor_style(int r, int g, int b, int a) {
return QString("background-color:rgba(%1,%2,%3,%4%);").arg(r).arg(g).arg(b).arg(a);
}
// border:[border]px;
inline QString build_border_style(size_t border) {
return QString("border:") + QString::number(border) + QString("px;");
}
// font:[font_size]pt;font-family:[font_family];
inline QString bulid_font_style(size_t font_size, QString font_family = def_font_families::yahei) {
return QString("font:") + QString::number(font_size) + QString("pt;")
+ QString("font-family:") + font_family + QString(";");
}
// color:#[color];font:[font_size]pt;font-family:[font_family];
inline QString build_style(QColor color, size_t font_size, QString font_family = def_font_families::yahei) {
return build_color_style(color) + bulid_font_style(font_size, font_family);
}
// background-color:#[color];color:#[color];font:[font_size]pt;font-family:[font_family];[border:[border]px;]
inline QString build_style(QColor bgcolor, QColor color, size_t font_size,
QString font_family = def_font_families::yahei,
bool with_border = false, size_t border = 0) {
auto style = build_bgcolor_style(bgcolor) + build_style(color, font_size, font_family);
if (with_border) { style += build_border_style(border); }
return style;
}
// background-color:rgba([r],[g],[b],[a]%);color:#[color];font:[font_size]pt;font-family:[font_family];
inline QString build_style(int r, int g, int b, int a, QColor color, size_t font_size,
QString font_family = def_font_families::yahei) {
return build_bgcolor_style(r, g, b, a) + build_style(color, font_size, font_family);
}
namespace def_style_sheets {
// color:#ffffff;font:11pt;font-family:Microsoft YaHei;
inline QString label() {
return build_style(Qt::white, 11);
}
// color:#fe3e3e;font:9pt;font-family:Microsoft YaHei;
inline QString hint() {
return build_style(def_colors::hint_color, 9);
}
// color:#202224;font:12pt;font-family:Microsoft YaHei;border:0px;
inline QString edit() {
return build_style(def_colors::window_bk, def_colors::edit_color, 12, def_font_families::yahei, true);
}
// color:#424446;font:11pt;font-family:Microsoft YaHei;border:0px;
inline QString unknown() {
return build_style(def_colors::control_bk_unknown, def_colors::edit_color, 11, def_font_families::yahei, true);
}
// background:transparent;color:#d7d5d5;font:18pt;font-family:Microsoft YaHei;
inline QString unkonwn_trans() {
return build_bg_style() + build_style(def_colors::unknown_trans, 18);
}
static const auto vertical_scroll_bar = R"(
QScrollBar:vertical
{
width:8px;
background:rgba(0,0,0,0%);
margin:0px,0px,0px,0px;
padding-top:0px;
padding-bottom:0px;
}
QScrollBar::handle:vertical
{
width:8px;
background:#444547;
border-radius:4px;
min-height:20;
}
QScrollBar::handle:vertical:hover
{
width:8px;
background:#444547;
border-radius:4px;
min-height:20;
}
QScrollBar::add-line:vertical
{
height:9px;
width:8px;
border-image:url(:/images/a/3.png);
subcontrol-position:bottom;
}
QScrollBar::sub-line:vertical
{
height:9px;
width:8px;
border-image:url(:/images/a/1.png);
subcontrol-position:top;
}
QScrollBar::add-line:vertical:hover
{
height:9px;
width:8px;
border-image:url(:/images/a/4.png);
subcontrol-position:bottom;
}
QScrollBar::sub-line:vertical:hover
{
height:9px;
width:8px;
border-image:url(:/images/2.png);
subcontrol-positino:top;
}
QScrollBar::add-page:vertical,QScrollBar::sub-page:vertical
{
background:rgba(0,0,0,10%);
border-radius:4px;
}
)";
static const auto search_bar_edit = R"(
border: 0px;
background: transparent;
selection-background-color: white;
color: #a8a9a9;
font-family: Microsoft Yahei;
font-size: 14px;
)";
static const auto progress_bar = R"(
QProgressBar{
background-color:#dedede;border-radius:3px;
}
QProgressBar::chunk{
background-color:#fd8b30;border-radius:3px;
}
)";
static const auto slider = R"(
QSlider::groove:horizontal
{
border:0px;
height:4px;
background:rgb(0,0,0);
}
QSlider::sub-page:horizontal
{
background:#fd8b30;
}
QSlider::add-page:horizontal
{
background:#141414;
}
QSlider::handle:horizontal
{
background:white;
width:10px;
border-radius:5px;
margin:-3px 0px -3px 0px;
}
)";
static const auto menu = R"(
QMenu::item
{
font-family: Microsoft Yahei;
font-size: 12pt;
color: #808080;
border: 1px solid gray;
background-color: rgb(234,234,234);
}
QMenu::item:hover
{
background-color: rgb(0, 0, 255);
}
)";
static const auto group_box = R"(
QGroupBox {
border: 1px solid gray;
border-radius: 9px;
margin-top: 0.5em;
font: 24pt;
font-family: Microsoft Yahei;
}
QGroupBox::title {
subcontrol-origin: margin;
left: 20px;
padding: 0 3px 0 3px;
color: white;
}
)";
static const auto listWidgetStyleSheet = R"(
QListWidget
{
font:12pt;
font-family:Microsoft Yahei;
background-color: #2c2d30;
border: 1px solid black;
}
QListWidget::item
{
color:#fd8b30;
border: 1px solid silver;
}
QListWidget::item::selected
{
color:#fd8b30;
border: 3px solid yellow;
}
)";
} // end of namespace def_style_sheets
} // end of namespace qt
} // end of namespace jlib
#pragma once
#include <cassert>
#include <QString>
#include <QColor>
#include <QPixmap>
#include <QApplication>
#include <QDesktopwidget>
#include <QIcon>
#include <QTimer>
#include <QDir>
#include <QProcess>
#include "QtGlobal.h"
#include "QtPathHelper.h"
namespace jlib {
namespace qt {
/**
* @brief 不阻塞UI响应的情况下,等待一段时间
* @param ms 等待的毫秒数
*/
static inline void non_blocking_wait_in_ui_thread(int ms) {
QEventLoop q;
QTimer t;
t.setSingleShot(true);
QObject::connect(&t, &QTimer::timeout, &q, &QEventLoop::quit);
t.start(ms);
q.exec();
}
/**
* @brief 在文件夹中显示
* @param pathIn 若为文件路径则在文件夹中显示,若为文件夹路径则打开改文件夹
*/
static inline void showInGraphicalShell(const QString &pathIn) {
QString param;
if (!QFileInfo(pathIn).isDir())
param = QLatin1String("/select,");
param += QDir::toNativeSeparators(pathIn);
QString command = "explorer.exe " + param;
QProcess::startDetached(command);
}
static inline bool warn_if_load_pixmap_failed(QPixmap& pixmap, QString icon_path, QString file_line)
{
if (!QDir().isAbsolutePath(icon_path)) {
icon_path = PathHelper::program() + "/" + icon_path;
}
if (!pixmap.load(icon_path) && !pixmap.load(icon_path, "png")) {
qCritical() << file_line << "load pixmap failed: " << icon_path;
assert(0);
return false;
}
return true;
}
#define LOAD_PIXMAP_EX(icon_path) jlib::qt::warn_if_load_pixmap_failed(pixmap, icon_path, QDEBUG_FILE_LINE_VER)
static QIcon icon_from_path(QString path, QSize icon_sz) {
QPixmap pixmap;
LOAD_PIXMAP_EX(path);
return QIcon(pixmap.scaled(icon_sz, Qt::KeepAspectRatio, Qt::SmoothTransformation));
}
static inline void fill_bg_with_color(QWidget * widget, QColor color)
{
if (!widget) { return; }
widget->setAutoFillBackground(true);
QPalette palette;
palette.setColor(QPalette::Background, color);
widget->setPalette(palette);
}
static inline void set_pos(QWidget * widget, QRect pos)
{
if (!widget) { return; }
widget->setFixedSize(pos.width(), pos.height());
widget->move(pos.left(), pos.top());
}
static inline void set_image_bg(QWidget* widget, QPixmap pixmap)
{
if (!widget || pixmap.isNull())return;
QPalette palette;
palette.setBrush(QPalette::Window, QBrush(pixmap));
widget->setPalette(palette);
}
static inline void set_image_bg(QWidget* widget, QString icon_path)
{
QPixmap pixmap;
if (!LOAD_PIXMAP_EX(icon_path)) { return; }
set_image_bg(widget, pixmap);
}
static inline void center_to_parent(QWidget* widget, QWidget* parent)
{
if (!widget || !parent) { return; }
auto center = parent->rect().center();
widget->move(center.x() - widget->width() / 2, center.y() - widget->height() / 2);
}
static inline void center_to_desktop(QWidget* widget)
{
if (!widget) { return; }
auto center = QApplication::desktop()->availableGeometry(widget).center();
widget->move(center.x() - widget->width() / 2, center.y() - widget->height() / 2);
}
static inline void center_to_desktop(QWidget* widget, int new_width, int new_height)
{
if (!widget) { return; }
auto center = QApplication::desktop()->availableGeometry(widget).center();
widget->setFixedSize(new_width, new_height);
widget->move(center.x() - new_width / 2, center.y() - new_height / 2);
widget->adjustSize();
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment