Qt实现 QQ好友列表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()信號。
使用
玩穿越,誰不會呀!O(∩_∩)O哈哈~
夢回經典,創建一個金庸老先生的武俠傳。主要分為三組:大美女、大英雄、大惡人。
人物屬性:會員、名字、圖像、個人說明。
古代人其實也蠻拼的,辦會員,好讓別人更了解TA、關注TA。。。
效果
源碼
#include <QToolBox> #include <QGroupBox> #include <QLabel> #include <QHBoxLayout>class ToolBox : public QToolBox { Q_OBJECT //只有加入了Q_OBJECT,你才能使用QT中的signal和slot機制 public: ToolBox(QWidget *parent = 0) : QToolBox(parent) { initUI(); //初始化UI // 連接信號槽 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; } };這里,我們建立了一個3行5列的二維數組,用來存儲人物信息。
對于type array[A][B]形式的二維數組,可以通過計算sizeof獲取行、列數。其中:
- sizeof(array[0][0]):為一個元素占用的空間,
- sizeof(array[0]):為一行元素占用的空間,
- sizeof(array):為整個數組占用的空間,
那么,很容易計算出行、列數:
- 行數 = sizeof(array)/sizeof(array[0]);
- 列數 = sizeof(array[0])/sizeof(array[0][0]);
為了創建人物信息,我們定義了一個initWidget()函數,主要實現是創建了三個標簽,分別用來顯示圖像、名字、個人說明。
創建完人物之后,再將他們添加至QGroupBox分組中。最后,通過addItem()添加所有的分組。這樣,我們就可以和他們聊天啦^_^。
轉載于:https://www.cnblogs.com/invisible2/p/6843135.html
總結
以上是生活随笔為你收集整理的Qt实现 QQ好友列表QToolBox的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 优惠券的工厂与策略模式实现方案
- 下一篇: IT常见缩写解释