由于写聊天软件的需要,设计此类以方便后面直接调用
使用的类
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());
}