Qt 之 QToolBox
簡(jiǎn)述
QToolBox類提供了一個(gè)列(選項(xiàng)卡式的)部件條目。
QToolBox可以在一個(gè)tab列上顯示另外一個(gè),并且當(dāng)前的item顯示在當(dāng)前的tab下面。每個(gè)tab都在tab列中有一個(gè)索引位置。tab的item是一個(gè)QWidget 。
| 版權(quán)聲明:一去、二三里,未經(jīng)博主允許不得轉(zhuǎn)載。
詳細(xì)描述
每個(gè)item都有一個(gè)itemText()、一個(gè)可選的itemIcon()、一個(gè)可選的itemToolTip()、和一個(gè)widget()函數(shù) 。item的屬性可以通過setItemText()、setItemIcon()、和setItemToolTip()來改變,并且每個(gè)item可以通過setItemEnabled()單獨(dú)設(shè)置為是否可用。
Item的添加使用addItem(),或通過insertItem()在特定位置插入。如果要獲取items的總數(shù),可以調(diào)用count()函數(shù)。Item可以使用removeItem()從toolbox中刪除。結(jié)合removeItem()和insertItem(),允許你將item移動(dòng)到不同的位置。
當(dāng)前item部件的索引由currentIndex()返回,并使用setCurrentIndex()來設(shè)置。一個(gè)特定item的索引可以使用indexOf()來獲取,item()則返回給定索引的item。
當(dāng)前的item發(fā)生變化時(shí),會(huì)發(fā)射currentChanged()信號(hào)。
使用
玩穿越,誰不會(huì)呀!O(∩_∩)O哈哈~
夢(mèng)回經(jīng)典,創(chuàng)建一個(gè)金庸老先生的武俠傳。主要分為三組:大美女、大英雄、大惡人。
人物屬性:會(huì)員、名字、圖像、個(gè)人說明。
古代人其實(shí)也蠻拼的,辦會(huì)員,好讓別人更了解TA、關(guān)注TA。。。
效果
源碼
#include <QToolBox> #include <QGroupBox> #include <QLabel> #include <QHBoxLayout>class ToolBox : public QToolBox {Q_OBJECTpublic:ToolBox(QWidget *parent = 0): QToolBox(parent){initUI();// 連接信號(hào)槽connect(this, &QToolBox::currentChanged, this, &ToolBox::onCurrentChanged);}private:void initUI() {struct User {bool bVIP; // 會(huì)員QString strName; // 名字QString strIcon; // 圖像QString strDesc; // 個(gè)人說明} user[3][5] ={{{true, QStringLiteral("香香公主"), ":/QQ/1", QStringLiteral("金庸筆下的第一美女")},{true, QStringLiteral("小龍女"), ":/QQ/2", QStringLiteral("玉女心經(jīng)")},{true, QStringLiteral("王語(yǔ)嫣"), ":/QQ/3", QStringLiteral("熟讀各派武學(xué)秘笈")},{false, QStringLiteral("趙敏"), ":/QQ/4", QStringLiteral("大元第一美人")},{false, QStringLiteral("周芷若"), ":/QQ/5", QStringLiteral("光復(fù)漢家河山,光大峨嵋")}},{{true, QStringLiteral("蕭峰"), ":/QQ/6", QStringLiteral("丐幫幫主 - 智勇雙全、膽略過人、豪邁颯爽")},{true, QStringLiteral("令狐沖"), ":/QQ/8", QStringLiteral("獨(dú)孤九劍")},{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;} };這里,我們建立了一個(gè)3行5列的二維數(shù)組,用來存儲(chǔ)人物信息。
對(duì)于type array[A][B]形式的二維數(shù)組,可以通過計(jì)算sizeof獲取行、列數(shù)。其中:
- sizeof(array[0][0]):為一個(gè)元素占用的空間,
- sizeof(array[0]):為一行元素占用的空間,
- sizeof(array):為整個(gè)數(shù)組占用的空間,
那么,很容易計(jì)算出行、列數(shù):
- 行數(shù) = sizeof(array)/sizeof(array[0]);
- 列數(shù) = sizeof(array[0])/sizeof(array[0][0]);
為了創(chuàng)建人物信息,我們定義了一個(gè)initWidget()函數(shù),主要實(shí)現(xiàn)是創(chuàng)建了三個(gè)標(biāo)簽,分別用來顯示圖像、名字、個(gè)人說明。
創(chuàng)建完人物之后,再將他們添加至QGroupBox分組中。最后,通過addItem()添加所有的分組。這樣,我們就可以和他們聊天啦^_^。
總結(jié)
以上是生活随笔為你收集整理的Qt 之 QToolBox的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 同济大学高等数学第7版视频
- 下一篇: u 20ubuntu 安装 postfi