#include "Global.h" #include "BackEnd/MainWidget.h" #include "Widget/base/export.h" #include "menu/BaseWidgetMenu.h" #include QVBoxLayout* create_vbox_layout(const std::vector& children, QWidget *parent){ auto ret = new QVBoxLayout(parent); ret->setMargin(0); ret->setSpacing(0); // ret->setSizeConstraint(QLayout::SizeConstraint::SetFixedSize); for(auto child : children){ ret->addWidget(child, 1); } return ret; } QHBoxLayout* create_hbox_layout(const std::vector& children, QWidget *parent){ auto ret = new QHBoxLayout(parent); ret->setMargin(0); ret->setSpacing(0); // ret->setSizeConstraint(QLayout::SizeConstraint::SetFixedSize); for(auto child : children){ ret->addWidget(child, 1); } return ret; } QRect get_max_rect(const QRect& rect, double WHRate){ double w = rect.width(), h = rect.height(); QRect ret; if(w/h > WHRate) { double should_w = h * WHRate; double x = (w - should_w)/2; ret = QRect((int)x, 0, (int)should_w, (int)h); } else { double should_h = w / WHRate; double y = (h - should_h)/2; ret = QRect(0, (int)y, (int)w, (int)should_h); } return ret; } int calculate_optimal_font_size(const std::vector& text_list, const QSize& space_size, const QFont& font) { int font_size = 1, textWidth, textHeight; do { textWidth = -1; textHeight = 0; QFontMetrics fontMetrics(QFont(font.family(), font_size)); for(const QString& text : text_list){ textWidth = std::max(textWidth, fontMetrics.horizontalAdvance(text)); textHeight += fontMetrics.height(); } font_size++; } while (textWidth < space_size.width() && textHeight < space_size.height()); return font_size; } int calculate_optimal_font_size(const QString& text, const QSize& space_size, const QFont& font) { int font_size = 1, textWidth, textHeight; do { QFontMetrics fontMetrics(QFont(font.family(), font_size)); textWidth = fontMetrics.horizontalAdvance(text); textHeight = fontMetrics.height(); font_size++; } while (textWidth < space_size.width() && textHeight < space_size.height()); return font_size; } Global::Global() { } int Global::adapt_height(int full_screen_height) { auto m = Main_Widget::instance(); return (int)(double(m->height() * full_screen_height)/double(QGuiApplication::primaryScreen()->size().height())); } int Global::adapt_width(int full_screen_width) { auto m = Main_Widget::instance(); return (int)(double(m->width() * full_screen_width)/double(QGuiApplication::primaryScreen()->size().width())); } QPushButton *create_button(const QString& text, int font_size, const std::function& func) { auto button = new QPushButton(text); button->setDisabled(true); button->setFocusPolicy(Qt::NoFocus); button->setFlat(true); button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); button->setCheckable(true); button->setChecked(false); QFont font; font.setPixelSize(font_size); button->setFont(font); if(func) QObject::connect(button, &QPushButton::clicked, func); return button; } QPushButton *create_click_button(const QString &text, int font_size, const std::function &func, renderive::Roll_Object *rollObject) { auto button = new QPushButton; init_click_button(button, text, font_size, func, rollObject); return button; } void init_click_button(QPushButton* button, const QString &text, int font_size, const std::function &func, renderive::Roll_Object *rollObject){ button->setText(text); button->setFocusPolicy(Qt::NoFocus); button->setFlat(true); button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); button->setCheckable(true); button->setChecked(false); QFont font; font.setPixelSize(font_size); button->setFont(font); if(func) QObject::connect(button, &QPushButton::clicked, [button, rollObject, func](){ rollObject->set_cur(button); func(); }); } QPushButton* create_normal(const QString& text, int font_size, const std::function& func) { auto button = new QPushButton(text); button->setDisabled(true); button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); button->setFocusPolicy(Qt::NoFocus); //button->setDefault(true); QFont font; font.setPixelSize(font_size); button->setFont(font); if(func) QObject::connect(button, &QPushButton::clicked, func); return button; } // int cell_width = width() / 15; // int cell_height = height() / 32; // // 绘制水平线条 // for (int row = 0; row < 33; ++row) { // int y = row * cell_height; // painter.drawLine(QPoint(0, y), QPoint(width(), y)); // } // // 绘制垂直线条 // for (int col = 0; col < 17; ++col) { // int x = col * cell_width; // painter.drawLine(QPoint(x, 0), QPoint(x, height())); // }