Qt动态多级导航菜单(二)

编程入门 行业动态 更新时间:2024-10-08 01:25:00

Qt动态多级导航<a href=https://www.elefans.com/category/jswz/34/1769013.html style=菜单(二)"/>

Qt动态多级导航菜单(二)

前文链接:Qt动态多级导航菜单
针对上个版本存在的一些问题进行修复,并着重改进菜单伸缩方式,由压缩改为平移。
效果图

核心代码

NavItem *QWHNavTreeView::addChildItem(const QString &text, NavItem *parent)
{NavItem *navBtn = new NavItem(text, parent);navBtn->setView(this);navBtn->m_level = parent->m_level + 1;navBtn->m_parent = parent;m_navItems.append(navBtn);parent->addChild(navBtn);if (!parent->m_container){// parent节点无容器,即parent节点从未有过孩子节点parent->m_container = new QScrollArea(this);parent->m_container->setFrameShape(QFrame::NoFrame);parent->m_container->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);parent->m_container->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);QHBoxLayout *hLayout = new QHBoxLayout(parent->m_container);hLayout->setContentsMargins(0, 0, 0, 0);parent->m_container->setLayout(hLayout);QWidget *widget = new QWidget(parent->m_container);QVBoxLayout *vLayout = new QVBoxLayout(widget);vLayout->setContentsMargins(0, 0, 0, 0);vLayout->setSpacing(0);widget->setLayout(vLayout);vLayout->addWidget(navBtn);QVBoxLayout *parentVLayout = (QVBoxLayout *)(parent->parentWidget())->layout();int index = parentVLayout->indexOf(parent);parent->m_container->setWidget(widget);hLayout->addWidget(widget);widget->setFixedHeight(NavItem::HEIGHT);parent->m_container->setFixedHeight(NavItem::HEIGHT);parentVLayout->insertWidget(index + 1, parent->m_container);}else {// parent节点有/有过孩子节点QWidget *widget = parent->m_container->widget();QVBoxLayout *vLayout = (QVBoxLayout *)widget->layout();vLayout->addWidget(navBtn);widget->setFixedHeight(vLayout->count() * NavItem::HEIGHT);parent->m_container->setFixedHeight(vLayout->count() * NavItem::HEIGHT);}// 父节点窗口调整高度while (parent->m_parent){QWidget *widget = parent->m_parent->m_container->widget();widget->setFixedHeight(widget->height() + NavItem::HEIGHT);parent->m_parent->m_container->setFixedHeight(widget->height());parent = parent->m_parent;}connect(navBtn, &QPushButton::clicked, this, &QWHNavTreeView::onItemClicked);return navBtn;
}

更多推荐

Qt动态多级导航菜单(二)

本文发布于:2024-03-23 15:09:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1739611.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:菜单   动态   Qt

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!