日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Qt实现 QQ好友列表QToolBox

發(fā)布時間:2023/12/15 综合教程 44 生活家
生活随笔 收集整理的這篇文章主要介紹了 Qt实现 QQ好友列表QToolBox 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡述

QToolBox類提供了一個列(選項卡式的)部件條目。

QToolBox可以在一個tab列上顯示另外一個,并且當(dāng)前的item顯示在當(dāng)前的tab下面。每個tab都在tab列中有一個索引位置。tab的item是一個QWidget 。

簡述
詳細(xì)描述
使用

效果
源碼

詳細(xì)描述

每個item都有一個itemText()、一個可選的itemIcon()、一個可選的itemToolTip()、和一個widget()函數(shù) 。item的屬性可以通過setItemText()、setItemIcon()、和setItemToolTip()來改變,并且每個item可以通過setItemEnabled()單獨設(shè)置為是否可用。

Item的添加使用addItem(),或通過insertItem()在特定位置插入。如果要獲取items的總數(shù),可以調(diào)用count()函數(shù)。Item可以使用removeItem()從toolbox中刪除。結(jié)合removeItem()和insertItem(),允許你將item移動到不同的位置。

當(dāng)前item部件的索引由currentIndex()返回,并使用setCurrentIndex()來設(shè)置。一個特定item的索引可以使用indexOf()來獲取,item()則返回給定索引的item。

當(dāng)前的item發(fā)生變化時,會發(fā)射currentChanged()信號。

使用

玩穿越,誰不會呀!O(∩_∩)O哈哈~

夢回經(jīng)典,創(chuàng)建一個金庸老先生的武俠傳。主要分為三組:大美女、大英雄、大惡人。

人物屬性:會員、名字、圖像、個人說明。

古代人其實也蠻拼的,辦會員,好讓別人更了解TA、關(guān)注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("玉女心經(jīng)")},
                {true, QStringLiteral("王語嫣"), ":/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("獨孤九劍")},
                {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列的二維數(shù)組,用來存儲人物信息。

對于type array[A][B]形式的二維數(shù)組,可以通過計算sizeof獲取行、列數(shù)。其中:

sizeof(array[0][0]):為一個元素占用的空間,
sizeof(array[0]):為一行元素占用的空間,
sizeof(array):為整個數(shù)組占用的空間,

那么,很容易計算出行、列數(shù):

行數(shù) = sizeof(array)/sizeof(array[0]);
列數(shù) = sizeof(array[0])/sizeof(array[0][0]);

為了創(chuàng)建人物信息,我們定義了一個initWidget()函數(shù),主要實現(xiàn)是創(chuàng)建了三個標(biāo)簽,分別用來顯示圖像、名字、個人說明。

創(chuàng)建完人物之后,再將他們添加至QGroupBox分組中。最后,通過addItem()添加所有的分組。這樣,我們就可以和他們聊天啦^_^。

總結(jié)

以上是生活随笔為你收集整理的Qt实现 QQ好友列表QToolBox的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。