#include "nmGUIDrawerWidget.h" nmGUIDrawerWidget::nmGUIDrawerWidget(const QString &sTitle, QWidget *parent) : QWidget(parent), m_bExpanded(true), m_sTitle(sTitle) { initUI(); this->setStyleSheet(""); } void nmGUIDrawerWidget::initUI() { // 标题栏 // 标题栏 QWidget *headerWidget = new QWidget(this); headerWidget->setObjectName("headerWidget"); m_pHeaderLayout = new QHBoxLayout(headerWidget); m_pHeaderLayout->setContentsMargins(2, 2, 2, 2); m_pToggleButton = new QToolButton(this); m_pToggleButton->setArrowType(Qt::DownArrow); m_pTitleLabel = new QLabel(m_sTitle, this); m_pTitleLabel->setStyleSheet("font-weight: bold;"); m_pHeaderLayout->addWidget(m_pToggleButton); m_pHeaderLayout->addWidget(m_pTitleLabel); m_pHeaderLayout->addStretch(); // 内容区域 m_pWidgetContent = new QWidget(this); m_pWidgetContent->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); m_pWidgetContent->setVisible(true); // 默认展开 // 主布局 QVBoxLayout *mainLayout = new QVBoxLayout(this); mainLayout->setSpacing(0); mainLayout->setContentsMargins(0, 0, 0, 0); mainLayout->addWidget(headerWidget); mainLayout->addWidget(m_pWidgetContent); connect(m_pToggleButton, SIGNAL(clicked()), this, SLOT(toggleExpand())); } void nmGUIDrawerWidget::toggleExpand() { setExpanded(!m_bExpanded); } void nmGUIDrawerWidget::setExpanded(bool expanded) { if (expanded != m_bExpanded) { m_bExpanded = expanded; m_pToggleButton->setArrowType(expanded ? Qt::DownArrow : Qt::RightArrow); m_pWidgetContent->setVisible(expanded); // 直接显示/隐藏内容区域 emit expansionChanged(expanded); } } void nmGUIDrawerWidget::setContentLayout(QLayout *layout) { m_pWidgetContent->setLayout(layout); } void nmGUIDrawerWidget::setStyleSheet(const QString &style) { QString customStyle = "#headerWidget {" " background-color: rgb(173, 216, 230);" // 设置标题栏背景颜色为浅蓝色 " width: 100%;" "}" "QToolButton {" "}" "QLabel {" "}"; QWidget::setStyleSheet(customStyle); // 调用基类方法 }