4.1 工具盒类(QToolBox)

4.1 工具盒类(QToolBox)
    QToolBox实际上也是一种容器Widget,他的特征是用来提供一种列状的层叠窗体容器,要注意将QToolBox和QToolButton区分
    开,QToolButton是一种特殊的按钮,这种按钮通常用在需要快速访问命令或选择项的按钮中,通常在工具栏中使用
    4.1.1 QToolBox的案例
        本案例将结合QToolBox,QToolButton,QGroupBox,QVBoxLayout来详细讲解这些控件的使用
    4.1.2 QToolBox中常用的函数        
        int addItem(QWidget *widget, const QIcon &iconSet, const QString &text)//向ToolBox中添加一个QWidget指针(可以指定该 Widget名称和图标描述)
        int addItem(QWidget *w, const QString &text)//同上
        int count() const//返回该ToolBox中有多少个QWidget*指针
        int currentIndex() const//返回当前正在使用的QWidget所对应的下标
        QWidget *currentWidget() const//返回默认的QWidget
        int indexOf(QWidget *widget) const//通过指针返回该Widget位于该ToolBox所处的下标位置
        int insertItem(int index, QWidget *widget, const QIcon &icon, const QString &text)//往指定的下标后插入Widget(指定图标和字符串描述)
        int insertItem(int index, QWidget *widget, const QString &text)//同上
        bool isItemEnabled(int index) const//判断该ToolBox中的某一个下标对应的Widget是否可用
        QIcon itemIcon(int index) const//返回该ToolBox某一个下标对应的Widget的图标描述
        QString itemToolTip(int index) const//通过下标返回该ToolBox中Widget的描述(需要调用setItemToolTip设置才能有,否则就是空字符串"")
        QString itemText(int index) const//返回该ToolBox某一个下标对应的Widget的文本描述
        void removeItem(int index)//通过下标移除该ToolBox中的某一个Widget指针
        void setItemEnabled(int index, bool enabled)//通过下标设置对应的Widget是否可用
        void setItemIcon(int index, const QIcon &icon)//通过下标设置Widget的图标
        void setItemText(int index, const QString &text)//通过下标设置Widget的字符串描述
        void setItemToolTip(int index, const QString &toolTip)//通过下标设置Widget的描述
        QWidget *widget(int index) const//通过下标返回Widget指针
        常用的信号函数
        void currentChanged(int index)//当位于该ToolBox中默认的Widget被改变时,会产生此信号
        常用的槽函数
        void setCurrentIndex(int index)//设置默认的Widget的下标
        void setCurrentWidget(QWidget *widget)//通过指针设置默认的Widget
    4.1.3 QToolButton常用的成员函数
        QToolButton继承于抽象Button类(QAbstractButton),QAbstractButton中的方法都被继承到该QToolButton类中,
        但某些方法会由于QToolButton的某些特性而被重写
        常用的成员函数
        void setAutoRaise(bool enable)//设置按钮被按下会会不会自动弹回
        void setIcon(const QIcon &icon)//设置按钮的图标
        void setIconSize(const QSize &size);//设置图标的大小
        void setToolButtonStyle(Qt::ToolButtonStyle style);//设置按钮的风格(这个风格是描述文字和图标的相对位置的)
        void setText(const QString &text);//设置按钮的显示文字
    4.1.4 案例(类似于QQ的好友显示抽屉效果的界面,见QToolBoxDemo)

   4.1.4.0 效果

        4.1.4.1 新建Qt的Widget Application项目,项目名称为QToolBoxDemo,项目不需要ui界面文件,将类名设置为QToolBoxDemo

   4.1.4.2 在qtoolboxdemo.h中写如下代码

查看代码
#ifndef QTOOLBOXDEMO_H
#define QTOOLBOXDEMO_H
#include <QMainWindow>
#include <QToolBox>
#include <QApplication>
#include <QDebug>
#include <QVector>
#include <QGroupBox>
#include <QToolButton>
#include <QVBoxLayout>
class QToolBoxDemo : public QMainWindow
{
    Q_OBJECT
public:
    QToolBoxDemo(QWidget *parent = nullptr);
    ~QToolBoxDemo();
public slots:
    void onCurrentChanged(int);
private:
    QToolButton*m_toolButton_0;
    QToolButton*m_toolButton_1;
    QToolButton*m_toolButton_2;
    QToolButton*m_toolButton_3;
    QToolButton*m_toolButton_4;
    QToolButton*m_toolButton_5;
    QToolButton*m_toolButton_6;
    QToolButton*m_toolButton_7;
    QToolButton*m_toolButton_8;
private:
    QGroupBox*m_groupBox_0;
    QGroupBox*m_groupBox_1;
    QGroupBox*m_groupBox_2;
private:
    QVBoxLayout*m_VBoxLayout_0;
    QVBoxLayout*m_VBoxLayout_1;
    QVBoxLayout*m_VBoxLayout_2;
private:
    QToolBox*m_mainToolBox;
};
#endif // QTOOLBOXDEMO_H

4.1.4.3 在qtoolboxdemo.cpp中写如下代码
        

查看代码
 #include "qtoolboxdemo.h"
QToolBoxDemo::QToolBoxDemo(QWidget *parent):QMainWindow(parent)
{
    //我的好友组
    m_toolButton_0 = new QToolButton;
    m_toolButton_0->setText(QString("张三"));
    m_toolButton_0->setIcon(QPixmap(QApplication::applicationDirPath()+"/1.jpg"));
    m_toolButton_0->setIconSize(QPixmap(QApplication::applicationDirPath()+"/1.jpg").size());
    m_toolButton_0->setAutoRaise(true);
    m_toolButton_0->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);

    m_toolButton_1 = new QToolButton;
    m_toolButton_1->setText(QString("李四"));
    m_toolButton_1->setIcon(QPixmap(QApplication::applicationDirPath()+"/2.png"));
    m_toolButton_1->setIconSize(QPixmap(QApplication::applicationDirPath()+"/2.png").size());
    m_toolButton_1->setAutoRaise(true);
    m_toolButton_1->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);

    m_toolButton_2 = new QToolButton;
    m_toolButton_2->setText(QString("王五"));
    m_toolButton_2->setIcon(QPixmap(QApplication::applicationDirPath()+"/3.png"));
    m_toolButton_2->setIconSize(QPixmap(QApplication::applicationDirPath()+"/3.png").size());
    m_toolButton_2->setAutoRaise(true);
    m_toolButton_2->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);

    m_toolButton_3 = new QToolButton;
    m_toolButton_3->setText(QString("小赵"));
    m_toolButton_3->setIcon(QPixmap(QApplication::applicationDirPath()+"/4.png"));
    m_toolButton_3->setIconSize(QPixmap(QApplication::applicationDirPath()+"/4.png").size());
    m_toolButton_3->setAutoRaise(true);
    m_toolButton_3->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);

    m_toolButton_4 = new QToolButton;
    m_toolButton_4->setText(QString("小孙"));
    m_toolButton_4->setIcon(QPixmap(QApplication::applicationDirPath()+"/5.png"));
    m_toolButton_4->setIconSize(QPixmap(QApplication::applicationDirPath()+"/5.png").size());
    m_toolButton_4->setAutoRaise(true);
    m_toolButton_4->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);

    m_groupBox_0 = new QGroupBox;
    m_VBoxLayout_0 = new QVBoxLayout(m_groupBox_0);
    m_VBoxLayout_0->setMargin(10);
    m_VBoxLayout_0->setAlignment(Qt::AlignCenter);
    m_VBoxLayout_0->addWidget(m_toolButton_0);
    m_VBoxLayout_0->addWidget(m_toolButton_1);
    m_VBoxLayout_0->addWidget(m_toolButton_2);
    m_VBoxLayout_0->addWidget(m_toolButton_3);
    m_VBoxLayout_0->addWidget(m_toolButton_4);
    m_VBoxLayout_0->addStretch();

    //陌生人组
    m_toolButton_5 = new QToolButton;
    m_toolButton_5->setText(QString("小王"));
    m_toolButton_5->setIcon(QPixmap(QApplication::applicationDirPath()+"/6.jpg"));
    m_toolButton_5->setIconSize(QPixmap(QApplication::applicationDirPath()+"/6.jpg").size());
    m_toolButton_5->setAutoRaise(true);
    m_toolButton_5->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);

    m_toolButton_6 = new QToolButton;
    m_toolButton_6->setText(QString("小张"));
    m_toolButton_6->setIcon(QPixmap(QApplication::applicationDirPath()+"/7.png"));
    m_toolButton_6->setIconSize(QPixmap(QApplication::applicationDirPath()+"/7.png").size());
    m_toolButton_6->setAutoRaise(true);
    m_toolButton_6->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);

    m_groupBox_1 = new QGroupBox;
    m_VBoxLayout_1 = new QVBoxLayout(m_groupBox_1);
    m_VBoxLayout_1->setMargin(10);
    m_VBoxLayout_1->setAlignment(Qt::AlignCenter);
    m_VBoxLayout_1->addWidget(m_toolButton_5);
    m_VBoxLayout_1->addWidget(m_toolButton_6);
    m_VBoxLayout_1->addStretch();
    //黑名单组
    m_toolButton_7 = new QToolButton;
    m_toolButton_7->setText(QString("小陈"));
    m_toolButton_7->setIcon(QPixmap(QApplication::applicationDirPath()+"/8.jpg"));
    m_toolButton_7->setIconSize(QPixmap(QApplication::applicationDirPath()+"/8.jpg").size());
    m_toolButton_7->setAutoRaise(true);
    m_toolButton_7->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);

    m_toolButton_8 = new QToolButton;
    m_toolButton_8->setText(QString("小李"));
    m_toolButton_8->setIcon(QPixmap(QApplication::applicationDirPath()+"/9.jpg"));
    m_toolButton_8->setIconSize(QPixmap(QApplication::applicationDirPath()+"/9.jpg").size());
    m_toolButton_8->setAutoRaise(true);
    m_toolButton_8->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);

    m_groupBox_2 = new QGroupBox;
    m_VBoxLayout_2 = new QVBoxLayout(m_groupBox_2);
    m_VBoxLayout_2->setMargin(10);
    m_VBoxLayout_2->setAlignment(Qt::AlignCenter);
    m_VBoxLayout_2->addWidget(m_toolButton_7);
    m_VBoxLayout_2->addWidget(m_toolButton_8);
    m_VBoxLayout_2->addStretch();

    //装进一个QToolBox中
    m_mainToolBox = new QToolBox(this);
    m_mainToolBox->addItem((QWidget*)m_groupBox_0,QString("我的好友"));
    m_mainToolBox->addItem((QWidget*)m_groupBox_1,QString("陌生人"));
    m_mainToolBox->addItem((QWidget*)m_groupBox_2,QString("黑名单"));
    m_mainToolBox->move(0,0);
    m_mainToolBox->resize(200,500);
    this->resize(m_mainToolBox->size());
    //以下是对QToolBox中的一些常用方法的使用
    qDebug() << "Count:" << m_mainToolBox->count();
    qDebug() << "currentIndex:" << m_mainToolBox->currentIndex();
    qDebug() << "currentWidget:" << m_mainToolBox->currentWidget();
    void*pWidget = m_mainToolBox->currentWidget();
    qDebug() << "pWidget:" << pWidget;
    qDebug() << "" << m_mainToolBox->indexOf((QWidget*)pWidget);
    qDebug() << "isItemEnabled" << m_mainToolBox->isItemEnabled(0);
    m_mainToolBox->setItemToolTip(0,QString("Index0"));
    qDebug() << m_mainToolBox->itemToolTip(0);
    //QToolBox常用的信号函数
    connect(m_mainToolBox,&QToolBox::currentChanged,this,&QToolBoxDemo::onCurrentChanged);
}

QToolBoxDemo::~QToolBoxDemo()
{
}

void QToolBoxDemo::onCurrentChanged(int index)
{
    qDebug() << "currentChanged:" << index;
}

注:本案例代码文件

 https://files.cnblogs.com/files/blogs/792763/QToolBoxDemo.zip?t=1699200923&download=true

posted @ 2023-11-06 00:16  蜡笔小新Pointer  阅读(1707)  评论(0)    收藏  举报