Qt学习笔记(二十一):QToolBox 的常用方法


在界面上拉一个 Tool Box 控件,和三个按钮控件:

代码如下:

#include "widget.h"
#include "ui_widget.h"
#include <QGroupBox>
#include <QDebug>
#include <QMessageBox>
#include <QToolButton>
#include <QVBoxLayout>
#include <QToolBox>
#include <QLabel>
#include <QHBoxLayout>
#include <QPixmap>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    
    // 设置边框样式
    ui->toolBox->setFrameStyle(QFrame::Panel);
    
    // 设置图标和文本信息
    ui->toolBox->setItemIcon(0, QIcon(":/Image/OnePiece.png"));
    ui->toolBox->setItemText(0, "海贼王");
    
    // 获取控件上 toolbox 的第一个子页
    QWidget *widget = ui->toolBox->widget(0);
    
    // QGroupBox 一般用于分组,作为容器部件使用,在其中可以布置各种窗口部件;
    // 但是需要注意的是,内部必须使用布局控件进行布局
    QGroupBox *groupBox = new QGroupBox(this);
    
    // 创建两个 QToolButton 对象
    QToolButton *btn1 = CreateToolButton("路飞一号", ":/Image/Luffy.png");
    QToolButton *btn2 = CreateToolButton("路飞二号", ":/Image/LuffyQ.png");
    
    // 创建一个垂直布局控件
    QVBoxLayout *pLayout = new QVBoxLayout(groupBox);
    pLayout->addWidget(btn1);               
    pLayout->addWidget(btn2);             
    pLayout->addStretch();                  // 添加一个可拉伸的空间
    pLayout->setAlignment(Qt::AlignHCenter);// 设置居中显示  
    
    // 为控件上 toolbox 的第一个子页设置内容(内容是一个布局)
    widget->setLayout(pLayout);
}

Widget::~Widget()
{
    delete ui;
}

// 创建 QToolButton 控件对象
QToolButton *Widget::CreateToolButton(QString text, QString icon)
{
    QToolButton *toolBtn = new QToolButton(this);
    toolBtn->setText(text);                                     // 设置文本
    toolBtn->setIcon(QIcon(icon));                              // 设置图标
    toolBtn->setIconSize(QSize(50, 50));                        // 设置图标大小
    toolBtn->setAutoRaise(true);                                // 设置自动提升
    toolBtn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);   // 设置文本在图标下面显示
    return toolBtn;
}

// 添加
void Widget::on_btnAdd_clicked()
{
    // QGroupBox 一般用于分组,作为容器部件使用,在其中可以布置各种窗口部件;
    // 但是需要注意的是,内部必须使用布局控件进行布局
    QGroupBox *groupBox = new QGroupBox(this);
    
    // 创建几个 QToolButton 对象
    QToolButton *btn1 = CreateToolButton("蝴蝶一号", ":/Image/butterfly.png");
    QToolButton *btn2 = CreateToolButton("蝴蝶二号", ":/Image/down.png");
    QToolButton *btn3 = CreateToolButton("蝴蝶三号", ":/Image/up.png");
    
    // 创建一个垂直布局控件
    QVBoxLayout *pLayout = new QVBoxLayout(groupBox);
    pLayout->addWidget(btn1);               
    pLayout->addWidget(btn2);               // 将 QToolButton 对象添加到布局中
    pLayout->addWidget(btn3); 
    pLayout->addStretch();                  // 添加一个可拉伸的空间
    pLayout->setAlignment(Qt::AlignHCenter);// 设置居中显示  
    
    // 将分组好的部件添加到 toolBox 中
    ui->toolBox->addItem(groupBox, QIcon(":/Image/butterfly.png"), "蝴蝶");
}

// 插入:多层布局
void Widget::on_btnInsert_clicked()
{
    // QGroupBox 一般用于分组,作为容器部件使用,在其中可以布置各种窗口部件;
    // 但是需要注意的是,内部必须使用布局控件进行布局;
    QGroupBox *groupBox = new QGroupBox(this);

    // 创建一个用于显示图片的 QLabel
//    QLabel *labImage = new QLabel(this);
//    labImage->resize(50, 50);
//    labImage->setPixmap(QPixmap(":/Image/Luffy.png"));
//    labImage->setScaledContents(true); // 设置图片自动拉伸,以适应控件大小
    
    // 注意:上面用 QLabel 显示图片,当图片较大时,没有找到方法让图片缩小
    // 以适应 label 控件大小,上面的方法单独使用有效,但是放到布局中就无效了;
    // 所以还是使用 QToolButton 控件吧;
    QToolButton *btnImage = CreateToolButton("万里阳光号", ":/Image/sunny.png");
    
    // 创建一个用于显示文字的 QLabel 
    QLabel *labName = new QLabel(this);
    labName->setText("船长:路飞");
    labName->setFont(QFont("宋体", 16));
    
    // 创建一个用于显示文字的 QLabel
    QLabel *labDesc = new QLabel(this);
    labDesc->setText("口号:我是要成为海贼王的男人!");
    labDesc->setFont(QFont("宋体", 12));
    
    // 先创建一个垂直布局控件:将两个显示文字的 QLabel 放入垂直布局中
    QVBoxLayout *vLayout = new QVBoxLayout();
    vLayout->addWidget(labName); 
    vLayout->addWidget(labDesc);
    
    // 再创建一个水平布局控件:将显示图片的 QToolButton 和上面的 垂直布局控件 一起放入水平布局中
    QHBoxLayout *hLayout = new QHBoxLayout();
    hLayout->addWidget(btnImage);
    hLayout->addLayout(vLayout);
    
    // 最后再创建一个垂直布局控件:作为 groupBox 中的整体布局
    QVBoxLayout *pvLayout = new QVBoxLayout(groupBox);
    pvLayout->addLayout(hLayout);
    pvLayout->addStretch();
    pvLayout->setAlignment(Qt::AlignLeft);
    
    // 将分组好的部件插入到 toolBox 中
    ui->toolBox->insertItem(ui->toolBox->count(), groupBox, QIcon(":/Image/sunny.png"), "海贼船");
}

// 删除
void Widget::on_btnDelete_clicked()
{
    // 程序一启动时默认选中的是就 第一项
    int index = ui->toolBox->currentIndex();
    qDebug() << QString::number(index);
    if (index == -1)
    {
        QMessageBox::warning(this, "系统提示", "请选择需要删除的项!");
    }
    else
    {
        if (QMessageBox::question(this, "系统提示", QString("是否要删除第 %1 项?").arg(QString::number(index + 1))) == QMessageBox::Yes)
        {
            ui->toolBox->removeItem(index);
        }
    }
}

程序一启动的时候,就修改 Page 1,并为其添加数据,效果如下:

 

点击 “添加” 按钮,效果如下:

点击 “插入” 按钮,效果如下:

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值