

C/C++ Qt Tree与Tab组件实现分页菜单
source link: https://blog.51cto.com/lyshark/5852790
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

C/C++ Qt Tree与Tab组件实现分页菜单
精选 原创虽然TreeWidget
组件可以实现多节点的增删改查,但多节点操作显然很麻烦,在一般的应用场景中基本上只使用一层结构即可解决大部分开发问题,TreeWidget
组件通常可配合TabWidget
组件,实现一个类似于树形菜单栏的功能,当用户点击菜单栏中的选项时则会跳转到不同的页面上。
首先在Qt的Ui编辑界面左侧加入TreeWidget
组件,右侧加入TabWidget
组件,将页面中的TabWidget
组件增加指定页,效果如下。

在MainWindow::MainWindow
主函数中我们对其中的两个组件进行初始化操作。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QStyleFactory>
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->treeWidget->clear();
ui->treeWidget->setColumnCount(1);
ui->treeWidget->setHeaderHidden(true);
ui->tabWidget->tabBar()->hide();
// 增加线条
ui->treeWidget->setStyle(QStyleFactory::create("windows"));
// ----------------------------------------------------------
// By: LyShark
// 创建 [系统设置] 父节点
QTreeWidgetItem *system_setup = new QTreeWidgetItem(ui->treeWidget,QStringList(QString("系统位置")));
system_setup->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsAutoTristate);
// 给父节点添加子节点
QTreeWidgetItem *system_setup_child_node_1 = new QTreeWidgetItem(system_setup);
system_setup_child_node_1->setText(0,"修改密码");
QTreeWidgetItem *system_setup_child_node_2 = new QTreeWidgetItem(system_setup);
system_setup_child_node_2->setText(0,"设置菜单");
// ----------------------------------------------------------
/
// 创建 [页面布局] 父节点
QTreeWidgetItem *page_layout = new QTreeWidgetItem(ui->treeWidget,QStringList(QString("页面布局")));
page_layout->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsAutoTristate);
QTreeWidgetItem *page_layout_clild_1 = new QTreeWidgetItem(page_layout);
page_layout_clild_1->setText(0,"页面配置");
QTreeWidgetItem *page_layout_clild_2 = new QTreeWidgetItem(page_layout);
page_layout_clild_2->setText(0,"页面参数");
ui->treeWidget->expandAll();
}
MainWindow::~MainWindow()
{
delete ui;
}
接着增加TreeWidget
组件的右键点击事件,当右键点击节点时,先判断节点是哪一个,并自动将TabWidget
组件切换到指定的页上。
// 当treeWidget空间双击后根据不同的菜单项选择不同的TabView页
void MainWindow::on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column)
{
QString str = item->text(column);
if(str == "修改密码")
{
ui->tabWidget->setCurrentIndex(0);
}
if(str == "设置菜单")
{
ui->tabWidget->setCurrentIndex(1);
}
if(str == "页面配置")
{
ui->tabWidget->setCurrentIndex(2);
}
if(str == "页面参数")
{
ui->tabWidget->setCurrentIndex(3);
}
}
代码实现起来很简单,具体实现效果如下所示:

- 1赞
- 1收藏
- 评论
- 分享
- 举报
Recommend
-
184
Tree Style Tab by Piro (piro_or)
-
22
Carbon 简介 Web 组件化和复用是目前所有前端开发人员追求的东西。Carbon 是 IBM 开源的 Web 组件库。将几乎所有常用 Web 功能封装成组件,可以重用和扩展。组件遵循了 IBM 独特的设计标准和风格,提供了统一的界面风格样式,...
-
30
-
11
如何实现进程代码段的分页度量 之前通过
-
7
鸿蒙开源第三方组件——SlidingMenu_ohos侧滑菜单组件 - HarmonyOS技术社区的个人空间 - OSCHINA - 中文开源技术交流社区 ...
-
4
《flomo》可以在 macOS 菜单栏快捷输入了!它还更新了回顾小组件 《flomo》自发布以来,大受好评。但多数用户仍在观望,究其原因,找不到使...
-
7
编辑导读:一些刚入行的设计师,对tab和按钮、单选框、菜单的区分有些疑惑。它们之间到底有什么关系?本文作者以一个案例作为切入,对此进行了分析,希望对你有帮助。
-
13
React Table 表格组件使用教程 排序、分页、搜索过滤筛选功能实战开发前端工程师最近更新 2022年07月05日
-
1
本文分别使用 SFC(模板方式)和 tsx 方式对 Element Plus el-menu 组件进行二次封装,实现配置化的菜单,有了配置化的菜单,后续便可以根据路由动态渲染菜单。 1 数据结构定义 1.1 菜单项数...
-
3
1. 效果:
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK