This commit is contained in:
2026-05-14 13:30:06 +08:00
parent 974946cee4
commit e43171521d
91 changed files with 10485 additions and 3254 deletions
@@ -0,0 +1,34 @@
#include "widgets/CompactNumericSpinBox.h"
#include <QAbstractSpinBox>
#include <QSizePolicy>
namespace gui {
namespace {
void polishCompact(QAbstractSpinBox* box, int maxWidthPx) {
if (!box) {
return;
}
box->setObjectName(QStringLiteral("CompactNumericSpin"));
box->setButtonSymbols(QAbstractSpinBox::UpDownArrows);
box->setFocusPolicy(Qt::StrongFocus);
box->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
box->setMinimumWidth(22);
box->setMaximumWidth(maxWidthPx);
}
} // namespace
CompactIntSpinBox::CompactIntSpinBox(QWidget* parent, int maxWidthPx)
: QSpinBox(parent) {
polishCompact(this, maxWidthPx);
}
CompactDoubleSpinBox::CompactDoubleSpinBox(QWidget* parent, int maxWidthPx)
: QDoubleSpinBox(parent) {
polishCompact(this, maxWidthPx);
}
} // namespace gui
@@ -0,0 +1,19 @@
#pragma once
#include <QDoubleSpinBox>
#include <QSpinBox>
namespace gui {
/// 属性栏用紧凑数值框:固定最大宽度,避免撑开过宽。
class CompactIntSpinBox final : public QSpinBox {
public:
explicit CompactIntSpinBox(QWidget* parent = nullptr, int maxWidthPx = 56);
};
class CompactDoubleSpinBox final : public QDoubleSpinBox {
public:
explicit CompactDoubleSpinBox(QWidget* parent = nullptr, int maxWidthPx = 58);
};
} // namespace gui
@@ -0,0 +1,82 @@
#include "widgets/PropertyPanelControls.h"
#include <QFormLayout>
#include <QSizePolicy>
#include <QTextEdit>
#include <QTextOption>
#include <QWidget>
namespace gui {
void polishPropertyStretchyTextField(QWidget* w) {
if (!w) {
return;
}
w->setMinimumWidth(0);
w->setMaximumWidth(QWIDGETSIZE_MAX);
const QSizePolicy sp = w->sizePolicy();
w->setSizePolicy(QSizePolicy::MinimumExpanding, sp.verticalPolicy());
}
void polishPropertyFormLayout(QFormLayout* form) {
if (!form) {
return;
}
form->setContentsMargins(0, 0, 0, 0);
form->setSpacing(6);
form->setHorizontalSpacing(8);
form->setVerticalSpacing(6);
form->setRowWrapPolicy(QFormLayout::WrapAllRows);
form->setLabelAlignment(Qt::AlignLeft | Qt::AlignTop);
form->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
}
void polishPropertyVBoxLayout(QVBoxLayout* lay) {
if (!lay) {
return;
}
lay->setContentsMargins(0, 0, 0, 0);
lay->setSpacing(8);
}
PropertyPanelLineEdit::PropertyPanelLineEdit(QWidget* parent)
: QLineEdit(parent) {
setObjectName(QStringLiteral("PropertyPanelLineEdit"));
setMinimumWidth(0);
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
setMaximumHeight(26);
}
PropertyPanelComboBox::PropertyPanelComboBox(QWidget* parent)
: QComboBox(parent) {
setObjectName(QStringLiteral("PropertyPanelComboBox"));
setMinimumWidth(0);
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
setMaximumHeight(26);
}
PropertyPanelCheckBox::PropertyPanelCheckBox(const QString& text, QWidget* parent)
: QCheckBox(text, parent) {
setObjectName(QStringLiteral("PropertyPanelCheckBox"));
setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
}
PropertyPanelPushButton::PropertyPanelPushButton(const QString& text, QWidget* parent)
: QPushButton(text, parent) {
setObjectName(QStringLiteral("PropertyPanelPushButton"));
setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
setMaximumHeight(26);
}
// TextEdit
PropertyPanelTextEdit::PropertyPanelTextEdit(QWidget* parent)
: QTextEdit(parent) {
setObjectName(QStringLiteral("PropertyPanelTextEdit"));
setMinimumWidth(80);
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
setWordWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
setLineWrapMode(QTextEdit::WidgetWidth);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
}
} // namespace gui
@@ -0,0 +1,46 @@
#pragma once
#include <QCheckBox>
#include <QComboBox>
#include <QFormLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QTextEdit>
#include <QVBoxLayout>
namespace gui {
/// 单行文本/容器:随面板宽度伸缩,不强行指定最小像素宽。
void polishPropertyStretchyTextField(QWidget* w);
/// 紧凑属性表:标签在上、控件在下(默认 ~200px 宽即可完整显示,无并排裁切)。
void polishPropertyFormLayout(QFormLayout* form);
void polishPropertyVBoxLayout(QVBoxLayout* lay);
class PropertyPanelLineEdit final : public QLineEdit {
public:
explicit PropertyPanelLineEdit(QWidget* parent = nullptr);
};
class PropertyPanelComboBox final : public QComboBox {
public:
explicit PropertyPanelComboBox(QWidget* parent = nullptr);
};
class PropertyPanelCheckBox final : public QCheckBox {
public:
explicit PropertyPanelCheckBox(const QString& text, QWidget* parent = nullptr);
};
class PropertyPanelPushButton final : public QPushButton {
public:
explicit PropertyPanelPushButton(const QString& text, QWidget* parent = nullptr);
};
class PropertyPanelTextEdit final : public QTextEdit {
public:
explicit PropertyPanelTextEdit(QWidget* parent = nullptr);
};
} // namespace gui