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

浙公网安备 33010602011771号