当前位置: 首页 > news >正文

Qt QToolBox 组件总结

Qt QToolBox 组件总结

1. 概述
  • 用途QToolBox 是一个垂直堆叠的可折叠面板容器,每个面板通过标签切换显示。适用于需要节省空间的界面设计(如工具选项板、设置窗口)。
  • 特点:一次仅显示一个面板,点击标签展开内容,其他面板自动折叠。继承自 QFrame,支持样式自定义。
2. 创建与基本用法
  • 头文件#include <QToolBox>
  • 添加页面
    QToolBox *toolBox = new QToolBox;
    QWidget *page1 = new QWidget;
    QWidget *page2 = new QWidget;
    // 添加页面(参数:内容控件、图标、标签文本)
    toolBox->addItem(page1, QIcon(), "Page 1");
    toolBox->addItem(page2, "Page 2"); // 无图标版本
    
3. 常用方法与属性
  • 页面管理
    • int currentIndex():获取当前页面索引。
    • void setCurrentIndex(int index):切换页面。
    • int count():返回页面总数。
  • 标签与图标
    • QString itemText(int index) / void setItemText(int index, const QString &text):获取/设置标签文本。
    • QIcon itemIcon(int index) / void setItemIcon(int index, const QIcon &icon):获取/设置标签图标。
  • 页面控件
    • QWidget *widget(int index):获取指定页面的控件。
4. 信号与槽
  • 关键信号
    • currentChanged(int index):当前页面切换时触发。
  • 示例连接
    connect(toolBox, &QToolBox::currentChanged, [](int index) {
        qDebug() << "当前页面索引:" << index;
    });
    
5. 样式与外观
  • QSS 示例
    QToolBox::tab {
        background: #f0f0f0;
        border: 1px solid #ccc;
        padding: 5px;
    }
    QToolBox::tab:selected { /* 选中标签样式 */ }
    
6. 注意事项
  • 布局管理:每个页面内的控件需合理布局(使用 QVBoxLayout 等),避免内容显示异常。
  • 动态更新:修改页面内容时,通过 widget(index) 获取控件后调整。
  • 索引安全:动态增删页面时,确保索引有效(避免越界)。
7. 与 QTabWidget 的区别
  • 布局方向QToolBox 垂直排列标签,适合紧凑空间;QTabWidget 水平/垂直标签栏,适合多页平铺。
  • 交互方式QToolBox 标签带折叠箭头,展开内容在下方;QTabWidget 直接切换标签对应内容区域。
8. 完整示例代码
#include <QApplication>
#include <QToolBox>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLabel>

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    QWidget window;
    QVBoxLayout *layout = new QVBoxLayout(&window);

    QToolBox *toolBox = new QToolBox;
    // 创建页面1
    QWidget *page1 = new QWidget;
    QPushButton *button = new QPushButton("按钮", page1);
    QVBoxLayout *page1Layout = new QVBoxLayout(page1);
    page1Layout->addWidget(button);
    // 创建页面2
    QWidget *page2 = new QWidget;
    QLabel *label = new QLabel("这是一个标签", page2);
    QVBoxLayout *page2Layout = new QVBoxLayout(page2);
    page2Layout->addWidget(label);
    
    toolBox->addItem(page1, "工具");
    toolBox->addItem(page2, QIcon(), "信息");
    layout->addWidget(toolBox);
    
    window.show();
    return a.exec();
}
9. 扩展功能
  • 禁用页面:通过 setItemEnabled(int index, bool enabled) 控制标签是否可点击。
  • 动态增删:使用 removeItem(int index) 移除页面,或 insertItem(int index, QWidget *w, const QString &text) 插入页面。
http://www.dtcms.com/a/26115.html

相关文章:

  • MySQL 事务:确保数据一致性的核心机制
  • 基于知识图谱的问答系统:后端Python+Flask,数据库Neo4j,前端Vue3(提供源码)
  • 【JavaEE进阶】Spring MVC(3)
  • C# 实现完善 Excel 不规则合并单元格数据导入
  • Cherry-Studio下载安装教程,AI面向开发者的工具或平台(付安装包)
  • R软件用潜在类别混合模型LCM分析老年人抑郁数据轨迹多变量建模研究
  • C++效率掌握之STL库:list函数全解
  • el-select:有关多选,options选项值不包含绑定值的回显问题
  • AI前端开发技能提升与ScriptEcho:拥抱智能时代的新机遇
  • 基于Java EE“陕西农特产品”网络交易平台设计与实现(源码+文档)
  • 乾崑版再添两大版型,全新岚图梦想家推动高阶智驾平权
  • 为什么视频编码是对YUV而不是RGB
  • 零基础学python(持续更新中。。。)
  • 市场波动中的数据分析与策略优化
  • 寒假总结。
  • JAVA中常用类型
  • 网页五子棋——对战前端
  • Qt:容器类控件
  • 51c深度学习~合集1
  • jdk从1.7升级为1.8需要注意什么
  • uniapp基于JSSDK 开发微信支付(php后端)
  • 23种设计模式之《单例模式(Singleton)》在c#中的应用及理解
  • BUUCTF [CISCN 2019 初赛]Love Math
  • ONNX Runtime 与 CUDA、cuDNN 的版本对应
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter17-事件
  • 【大模型】DeepSeek 的人工智能发展之路
  • 【SpringBoot教程】Spring Boot + MySQL + Druid连接池整合教程
  • 懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制)
  • 当Qt遇见IOCP:用C++打造高并发服务器
  • Android 动态加入Activity 时 manifest 注册报错解决。使用manifestPlaceholders 占位