一、QToolBox 简述
QToolBox类提供了一个列(选项卡式的)部件条目。
QToolBox可以在一个tab列上显示另外一个,并且当前的item显示在当前的tab下面。每个tab都在tab列中有一个索引位置。tab的item是一个QWidget 。
每个item都有一个itemText()、一个可选的itemIcon()、一个可选的itemToolTip()、和一个widget()函数 。item的属性可以通过setItemText()、setItemIcon()、和setItemToolTip()来改变,并且每个item可以通过setItemEnabled()单独设置为是否可用。
Item的添加使用addItem(),或通过insertItem()在特定位置插入。
如果要获取items的总数,可以调用count()函数。
Item可以使用removeItem()从toolbox中删除。并且结合removeItem()和insertItem(),允许你将item移动到不同的位置。
当前item部件的索引由currentIndex()返回,并使用setCurrentIndex()来设置。一个特定item的索引可以使用indexOf()来获取,item()则返回给定索引的item。
当前的item发生变化时,会发射currentChanged()信号。
例子
#include <QToolBox>
#include <QGroupBox>
#include <QLabel>
#include <QHBoxLayout>
class ToolBox : public QToolBox
{
Q_OBJECT
public:
ToolBox(QWidget *parent = 0)
: QToolBox(parent)
{
initUI();
// 连接信号槽
connect(this, &QToolBox::currentChanged, this, &ToolBox::onCurrentChanged);
}
private:
void initUI() {
struct User {
bool bVIP; // 会员
QString strName; // 名字
QString strIcon; // 图像
QString strDesc; // 个人说明
} user[3][5] =
{
{
{true, QStringLiteral("香香公主"), ":/QQ/1", QStringLiteral("金庸笔下的第一美女")},
{true, QStringLiteral("小龙女"), ":/QQ/2", QStringLiteral("玉女心经")},
{true, QStringLiteral("王语嫣"), ":/QQ/3", QStringLiteral("熟读各派武学秘笈")},
{false, QStringLiteral("赵敏"), ":/QQ/4", QStringLiteral("大元第一美人")},
{false, QStringLiteral("周芷若"), ":/QQ/5", QStringLiteral("光复汉家河山,光大峨嵋")}
},
{
{true, QStringLiteral("萧峰"), ":/QQ/6", QStringLiteral("丐帮帮主 - 智勇双全、胆略过人、豪迈飒爽")},
{true, QStringLiteral("令狐冲"), ":/QQ/8", QStringLiteral("独孤九剑")},
{true, QStringLiteral("杨过"), ":/QQ/9", QStringLiteral("黯然销魂掌")},
{false, QStringLiteral("郭靖"), ":/QQ/7", QStringLiteral("降龙十八掌")},
{false, QStringLiteral("胡一刀"), ":/QQ/10", QStringLiteral("辽东大侠")}
},
{
{true, QStringLiteral("金轮法王"), ":/QQ/11", QStringLiteral("龙象般若功")},
{true, QStringLiteral("丁春秋"), ":/QQ/13", QStringLiteral("星宿老仙,法力无边")},
{false, QStringLiteral("裘千仞"), ":/QQ/12", QStringLiteral("铁掌水上飘")},
{false, QStringLiteral("成昆"), ":/QQ/14", QStringLiteral("混元霹雳手")},
{false, QStringLiteral("李莫愁"), ":/QQ/15", QStringLiteral("冰魄银针,杀人如麻")}
}
};
QStringList groupList;
groupList << QStringLiteral("大美女") << QStringLiteral("大英雄") << QStringLiteral("大恶人");
// 初始化列表
for (int i = 0; i < sizeof(user)/sizeof(user[0]); i++)
{
QGroupBox *pGroupBox = new QGroupBox(this);
QVBoxLayout *pLayout = new QVBoxLayout(pGroupBox);
// 添加好友
for (int j = 0; j < sizeof(user[0])/sizeof(user[0][0]); ++j)
{
QWidget *pWidget = initWidget(user[i][j].bVIP, user[i][j].strName,
user[i][j].strIcon, user[i][j].strDesc);
pLayout->addWidget(pWidget);
}
pLayout->addStretch();
pLayout->setSpacing(10);
pLayout->setContentsMargins(10, 10, 10, 10);
// 添加分组
addItem(pGroupBox, groupList.at(i));
}
}
QWidget* initWidget(bool bVIP, const QString &name,
const QString &icon, const QString &desc = "") {
QWidget *pWidget = new QWidget(this);
QLabel *pPixmapLabel = new QLabel(this);
QLabel *pNameLabel = new QLabel(this);
QLabel *pDescLabel = new QLabel(this);
// 图像 名称 描述
pPixmapLabel->setPixmap(QPixmap(icon));
pNameLabel->setText(name);
pDescLabel->setText(desc);
// VIP名字为红色;否则,白色
pNameLabel->setStyleSheet(QString("color: %1;").arg(bVIP ? "rgb(240, 30, 40)" : "white"));
pDescLabel->setStyleSheet("color: gray;");
QVBoxLayout *pVLayout = new QVBoxLayout();
pVLayout->addStretch();
pVLayout->addWidget(pNameLabel);
pVLayout->addWidget(pDescLabel);
pVLayout->addStretch();
pVLayout->setSpacing(5);
pVLayout->setContentsMargins(0, 0, 0, 0);
QHBoxLayout *pHLayout = new QHBoxLayout();
pHLayout->addWidget(pPixmapLabel);
pHLayout->addLayout(pVLayout);
pHLayout->addStretch();
pHLayout->setContentsMargins(0, 0, 0, 0);
pWidget->setLayout(pHLayout);
return pWidget;
}
private slots:
void onCurrentChanged(int index) {
QString strGroup = itemText(index);
qDebug() << strGroup;
}
};
二、QLCDNumber
QLCDNumber控件用于显示一个LCD数字。
它可以显示几乎任意大小的数字。可以显示十进制、十六进制、八进制或二进制数。很容易使用display()槽连接到数据源,这个槽可以被任何五个参数类型的数据源重载。
接口 描述
setDigitCount(int numDigits) 设置所显示的位数
setBinMode() 以二进制形式显示
setOctMode() 以八进制形式显示
setHexMode() 以十六进制形式显示
setDecMode() 以十进制形式显示(默认)
setSmallDecimalPoint(bool) 其参数设置为true或者false,决定了小数点单独站一位空间还是在两个位之间。换句话说,如果参数为true,小数点将占用比平常更少的空间
setSegmentStyle(SegmentStyle) 改变现实数字的外观,包括:Outline、Filled、Flat
checkOverflow(double num) 检查给定值是否可以在区域内显示(也会发射overflow()信号,可以将其连接到槽中处理)