700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Qt学习——利用QToolBox实现QQ好友列表

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

时间:2022-01-13 04:44:57

相关推荐

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_OBJECTpublic: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());}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。