Qt学习——利用QToolBox实现QQ好友列表

由于写聊天软件的需要,设计此类以方便后面直接调用

使用的类

QToolBox、QGroupBox、QVBoxLayout、QToolButton、QList

设计思路

对按钮显示信息进行设置,令每个按钮表示一个好友,创建类FriList使共有其继承于QToolBox,保留QToolBox的成员函数,好友添加、群组添加等函数。将设置好的按钮添加进页面中。最后利用QVBoxLayout的一些函数设置布局。

1、声明私有成员friend_list与group_list用于保存已经创建好的好友或群组按钮

    QList <QToolButton *>friend_list;   //好友列表
    QList <QToolButton *>group_list;    //群组列表

2、声明QGroupBox型私有成员friendBox与groupBox,分别作为好友页与群组页

    QGroupBox *friendBox;   //好友页
    QGroupBox *groupBox;    //群组页

 3、声明QVBoxLayout型私有成员layout_fri与layout_group,分别用于对好友页与群组页进行布局

    QVBoxLayout *layout_fri;    //好友页布局
    QVBoxLayout *layout_group;  //群组页布局

4、声明公有成员函数setLayFri()与setLayGro()利用QVBoxLayout类的成员函数setMargin()、setAlignment(Qt::AlignLeft)以及addItem((QWidget*)friendBox,QStringLiteral("好友列表"))对好友页与群组页进行布局

void FriList::setLayFri()
{
    //好友页布局
    layout_fri = new QVBoxLayout(friendBox);
    layout_fri->setMargin(45);
    layout_fri->setAlignment(Qt::AlignLeft);
    this->addItem((QWidget*)friendBox,QStringLiteral("好友列表"));
}

void FriList::setLayGro()
{
    //群组页布局
    layout_group = new QVBoxLayout(groupBox);
    layout_fri->setMargin(45);
    layout_fri->setAlignment(Qt::AlignLeft);
    this->addItem((QWidget*)groupBox,QStringLiteral("群组列表"));
}

5、 声明公有成员函数addFriend()与addGroup()分别实现对页面添加好友或群组、并利用QToolButton的成员函数setText()、setIcon(QPixmap(iconpath))、setIconSize(QSize(100,30))、setAutoRaise(true)以及setToolButtonStyle(Qt::ToolButtonTextBesideIcon)在其中对好友或群组按钮进行设置,最后将设置好的按钮添加到好友按钮列表中并添加至ui界面

void FriList::addFriend(int id, QString user, QString icon, QString desc)
{
    QToolButton *tempButton = new QToolButton;
    QString iconpath = QString(":/pic/%1.ico").arg(icon);
    QString text = QString("%1 <%2>").arg(user).arg(desc);
    tempButton->setText(text);
    qDebug()<<iconpath;
    tempButton->setIcon(QPixmap(iconpath));
    tempButton->setIconSize(QSize(100,30)); //设置按钮尺寸
    tempButton->setAutoRaise(true);   //当鼠标离开时,按钮恢复为弹起状态
    tempButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); //设置按钮文字显示在图标旁边
    friend_list.append(tempButton);
    layout_fri->addWidget(friend_list.last());
}

void FriList::addGroup(int id, QString name, QString icon, QString desc)
{
    QToolButton *tempButton = new QToolButton;
    QString iconpath = QString(":/pic/%1.ico").arg(icon);
    QString text = QString("%1 <%2>").arg(name).arg(desc);
    tempButton->setText(text);
    qDebug()<<iconpath;
    tempButton->setIcon(QPixmap(iconpath));
    tempButton->setIconSize(QSize(100,30)); //设置按钮尺寸
    tempButton->setAutoRaise(true);   //当鼠标离开时,按钮恢复为弹起状态
    tempButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); //设置按钮文字显示在图标旁边
    group_list.append(tempButton);
    layout_group->addWidget(group_list.last());

}

6、 在构造函数中对指针friendBox与groupBox开辟空间并调用成员函数this->setLayFri()、this->setLayGro()。

FriList::FriList(QWidget *parent,Qt::WindowFlags f)
    :QToolBox(parent,f)
{
    friendBox = new QGroupBox;
    groupBox = new QGroupBox;

    this->setLayFri();
    this->setLayGro();
}

7、 最后在其他类中调用测试

    FriList *fr = new FriList(this);
    fr->addFriend(10001,"kid","00","hahah");
    fr->addFriend(10002,"赵满刚","03","呵呵呵呵");
    fr->addGroup(11111,"itKim","07","it 交流");
    fr->addGroup(22222,"闲聊","06","闲聊群");

测试结果

               

完整源码

 

//filename:frilist.h

#ifndef FRILIST_H
#define FRILIST_H
#include <QToolBox>
#include <QToolButton>
#include <QGroupBox>
#include <QVBoxLayout>
#include <QList>
#include <QDebug>
class FriList : public QToolBox
{
    Q_OBJECT
public:
    FriList(QWidget *parent=0,Qt::WindowFlags f=0);
    void setLayFri();   //好友页布局
    void setLayGro();   //群组页布局
    void addFriend(int id,QString user,QString icon,QString desc);  //添加好友
    void addGroup(int id,QString name,QString icon,QString desc);   //添加群组
private:
    QToolButton *toolBtn1;
    QList <QToolButton *>friend_list;   //好友列表
    QList <QToolButton *>group_list;    //群组列表
    QGroupBox *friendBox;   //好友页
    QGroupBox *groupBox;    //群组页
    QVBoxLayout *layout_fri;    //好友页布局
    QVBoxLayout *layout_group;  //群组页布局
};

#endif // DRAWER_H
//filename:frilist.cpp

#include "frilist.h"
#include <QGroupBox>
#include <QVBoxLayout>

FriList::FriList(QWidget *parent,Qt::WindowFlags f)
    :QToolBox(parent,f)
{
    friendBox = new QGroupBox;
    groupBox = new QGroupBox;

    this->setLayFri();
    this->setLayGro();
}

void FriList::setLayFri()
{
    //好友页布局
    layout_fri = new QVBoxLayout(friendBox);
    layout_fri->setMargin(45);
    layout_fri->setAlignment(Qt::AlignLeft);
    this->addItem((QWidget*)friendBox,QStringLiteral("好友列表"));
}
void FriList::setLayGro()
{
    //群组页布局
    layout_group = new QVBoxLayout(groupBox);
    layout_fri->setMargin(45);
    layout_fri->setAlignment(Qt::AlignLeft);
    this->addItem((QWidget*)groupBox,QStringLiteral("群组列表"));
}

void FriList::addFriend(int id, QString user, QString icon, QString desc)
{
    QToolButton *tempButton = new QToolButton;
    QString iconpath = QString(":/pic/%1.ico").arg(icon);
    QString text = QString("%1 <%2>").arg(user).arg(desc);
    tempButton->setText(text);
    qDebug()<<iconpath;
    tempButton->setIcon(QPixmap(iconpath));
    tempButton->setIconSize(QSize(100,30)); //设置按钮尺寸
    tempButton->setAutoRaise(true);   //当鼠标离开时,按钮恢复为弹起状态
    tempButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); //设置按钮文字显示在图标旁边
    friend_list.append(tempButton);
    layout_fri->addWidget(friend_list.last());
}

void FriList::addGroup(int id, QString name, QString icon, QString desc)
{
    QToolButton *tempButton = new QToolButton;
    QString iconpath = QString(":/pic/%1.ico").arg(icon);
    QString text = QString("%1 <%2>").arg(name).arg(desc);
    tempButton->setText(text);
    qDebug()<<iconpath;
    tempButton->setIcon(QPixmap(iconpath));
    tempButton->setIconSize(QSize(100,30)); //设置按钮尺寸
    tempButton->setAutoRaise(true);   //当鼠标离开时,按钮恢复为弹起状态
    tempButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); //设置按钮文字显示在图标旁边
    group_list.append(tempButton);
    layout_group->addWidget(group_list.last());

}

 

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值