简述

QToolBox类提供一列带标签的窗口小部件项目。

功能详述

工具箱是一个小部件,在这个小部件显示着一列带标签的选项卡。其中,当前选项卡下显示的当前项目。

每个项目都有一个itemText(),一个可选的itemIcon(),一个可选的itemToolTip()和一个widget()。可以使用setItemText(),setItemIcon()和setItemToolTip()更改项目的属性。可以使setItemEnabled()分别启用或禁用每个项目。

使用addItem()添加项目,或使用insertItem()在特定位置插入项目。项目总数由count()给出。可以使用delete删除项目,也可以使用removeItem()从工具箱中删除项目。组合removeItem()和insertItem()可以将项目移动到不同的位置。

当前项目窗口小部件的索引由currentIndex()返回,并使用setCurrentIndex()进行设置。可以使用indexOf()找到特定项目的索引,并且给定索引处的项目由item()返回。

当前项目更改时,将发出currentChanged()信号。

使用

效果

上面的效果模仿了Qt Designer的导航栏。

源码

    struct User {
        QString strName;  // 名字
        QString strIcon;  // 图像
    } widget[2][3] = {
        {
            {"Horizontal Spacer", ":/picture/horizontal_spacer.png"},
            {"Vertical Spacer", ":/picture/vertical_spacer.png"}
        },
        {
            {"Push Button", ":/picture/pushbutton.png"},
            {"Tool Button", ":/picture/tool_button.png"}
        }
    };

    QStringList groupList = {"Spacers", "Buttons"};

    QToolBox *toolBox = new QToolBox;
    toolBox->setContentsMargins(0, 0, 0, 0);

    for (int i = 0; i < static_cast<int>( sizeof (widget)/sizeof (widget[0]) ); i++) {
        QGroupBox *groupBox = new QGroupBox(this);
        groupBox->setContentsMargins(0, 0, 0, 0);
        groupBox->setFlat(true);
        groupBox->setStyleSheet("QGroupBox {background-color:white}");
        QVBoxLayout *vLayout = new QVBoxLayout(groupBox);
        vLayout->setMargin(0);

        for (int j = 0; j < static_cast<int>( sizeof (widget[0])/sizeof (widget[0][0]) ); j++) {
            QPushButton *itemBtn = new QPushButton;
            itemBtn->setFlat(true);
            itemBtn->setStyleSheet("QPushButton {text-align:left}");
            itemBtn->setIcon(QIcon(widget[i][j].strIcon));
            itemBtn->setText(widget[i][j].strName);

            vLayout->addWidget(itemBtn);
        }

        groupBox->setLayout(vLayout);
        toolBox->addItem(groupBox, groupList[i]);
    }

    QGridLayout *gridLayout = new QGridLayout;
    gridLayout->addWidget(toolBox);

    this->setLayout(gridLayout);

QTooBox是一个很常见的控件种类,比如QQ好友列表。

常用设置

添加条目

toolBox->addItem(groupBox, "第一个条目");
toolBox->addItem(groupBox, QIcon(":/picture/icon.jpg"), "第二个条目");//带icon

在添加条目的时候,我们需要指定条目名称,同时可以决定是否设定icon。

插入条目

toolBox->insertItem(1, groupBox, "第一个条目");
toolBox->insertItem(1, groupBox, QIcon(":/picture/icon.jpg"), "第二个条目");//带icon

移除条目

toolBox->removeItem(1)

使能条目

toolBox->setItemEnabled(1, true);

信号槽

槽函数

名称描述
setCurrentIndex(int index)设置当前条目索引
setCurrentWidget(QWidget *widget)指定当前控件

信号

名称描述
currentChanged(int index)当控件改变时触发,并传递改变后的条目的索引值

引用

[1] Qt助手

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐