本文主要讲解网盘中文件操作的分享文件部分,主要包含两方面的设计:分享文件界面设计和逻辑设计。
1、界面设计
1.1、添加一个类
1.2、引入头文件
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QButtonGroup>
#include <QScrollArea>
1.3、添加对象
private://全选QPushButton *m_pSelectAllPB;//取消QPushButton *m_pCancelSelectPB;//确定QPushButton *m_pOKPB;//取消分享QPushButton *m_pCancelPB;//中间显示好友的区域QScrollArea *m_pSA;QWidget *m_pFriendW;QButtonGroup *m_pButtonGroup;
1.4、添加控件,定义布局
ShareFile::ShareFile(QWidget *parent) : QWidget(parent)
{//全选m_pSelectAllPB = new QPushButton("全选");//取消m_pCancelSelectPB = new QPushButton("取消选择");//确定m_pOKPB = new QPushButton("确定");//取消分享m_pCancelPB = new QPushButton("取消");//中间显示好友的区域m_pSA = new QScrollArea;m_pFriendW = new QWidget;m_pButtonGroup = new QButtonGroup(m_pFriendW);QHBoxLayout *pTopHBL = new QHBoxLayout;pTopHBL->addWidget(m_pSelectAllPB);pTopHBL->addWidget(m_pCancelSelectPB);pTopHBL->addStretch();//弹簧QHBoxLayout *pDownHBL = new QHBoxLayout;pDownHBL->addWidget(m_pOKPB);pDownHBL->addWidget(m_pCancelPB);QVBoxLayout *pMainVBL = new QVBoxLayout;pMainVBL->addLayout(pTopHBL);pMainVBL->addWidget(m_pSA);pMainVBL->addLayout(pDownHBL);setLayout(pMainVBL);
}
1.5、展示效果
1.6、将好友放进来
void ShareFile::test()
{QVBoxLayout *p = new QVBoxLayout(m_pFriendW);QCheckBox *pCB = NULL;for(int i=0;i<15;i++){pCB = new QCheckBox("jack");p->addWidget(pCB);m_pButtonGroup->addButton(pCB);}m_pSA->setWidget(m_pFriendW);
}
#include "sharefile.h"ShareFile::ShareFile(QWidget *parent) : QWidget(parent)
{//全选m_pSelectAllPB = new QPushButton("全选");//取消m_pCancelSelectPB = new QPushButton("取消选择");//确定m_pOKPB = new QPushButton("确定");//取消分享m_pCancelPB = new QPushButton("取消");//中间显示好友的区域m_pSA = new QScrollArea;m_pFriendW = new QWidget;m_FriendWVBL = new QVBoxLayout(m_pFriendW);m_pButtonGroup = new QButtonGroup(m_pFriendW);m_pButtonGroup->setExclusive(false);QHBoxLayout *pTopHBL = new QHBoxLayout;pTopHBL->addWidget(m_pSelectAllPB);pTopHBL->addWidget(m_pCancelSelectPB);pTopHBL->addStretch();//弹簧QHBoxLayout *pDownHBL = new QHBoxLayout;pDownHBL->addWidget(m_pOKPB);pDownHBL->addWidget(m_pCancelPB);QVBoxLayout *pMainVBL = new QVBoxLayout;pMainVBL->addLayout(pTopHBL);pMainVBL->addWidget(m_pSA);pMainVBL->addLayout(pDownHBL);setLayout(pMainVBL);
}ShareFile &ShareFile::getinstance()
{static ShareFile instance;return instance;
}void ShareFile::test()
{QVBoxLayout *p = new QVBoxLayout(m_pFriendW);QCheckBox *pCB = NULL;for(int i=0;i<15;i++){pCB = new QCheckBox("jack");p->addWidget(pCB);m_pButtonGroup->addButton(pCB);}m_pSA->setWidget(m_pFriendW);
}void ShareFile::updateFriend(QListWidget *pFriendList)
{if(NULL == pFriendList){return;}QAbstractButton *tmp = NULL;//刷新掉以前的QList<QAbstractButton*>preFriendList = m_pButtonGroup->buttons();for(int i=0;i<preFriendList.size();i++){tmp = preFriendList[i];m_FriendWVBL->removeWidget(tmp);m_pButtonGroup->removeButton(tmp);preFriendList.removeOne(tmp);delete tmp;tmp = NULL;}//将新的放进来QAbstractButton *pCB = NULL;for(int i=0;i<pFriendList->count();i++){pCB = new QCheckBox(pFriendList->item(i)->text());m_FriendWVBL->addWidget(pCB);m_pButtonGroup->addButton(pCB);}m_pSA->setWidget(m_pFriendW);
}
现在简单的界面设计就做好了
1.7、将在线好友添加到界面上显示
//分享文件void shareFile();
1.8、关联槽函数
//关联分享文件槽函数connect(m_pShareFilePB, SIGNAL(clicked(bool)),this, SLOT(shareFile()));
1.9、添加定义
void Book::shareFile()
{//获得好友列表Friend *pFriend = OpeWidget::getInstance().getFriend();QListWidget *pFriendList = pFriend->getFriendlist();//将内容依次遍历出来for(int i=0;i<pFriendList->count();i++){qDebug()<<pFriendList->item(i)->text();}
}
测试一下
获得在线好友列表是没有问题的
1.10、将sharefile写成单例模式
static ShareFile &getinstance();
ShareFile &ShareFile::getinstance()
{static ShareFile instance;return instance;
}
1.11、更新好友函数
//更新friendvoid updateFriend(QListWidget *pFriendList);
void ShareFile::updateFriend(QListWidget *pFriendList)
{if(NULL == pFriendList){return;}QAbstractButton *tmp = NULL;//刷新掉以前的QList<QAbstractButton*>preFriendList = m_pButtonGroup->buttons();for(int i=0;i<preFriendList.size();i++){tmp = preFriendList[i];m_FriendWVBL->removeWidget(tmp);m_pButtonGroup->removeButton(tmp);preFriendList.removeOne(tmp);delete tmp;tmp = NULL;}//将新的放进来QAbstractButton *pCB = NULL;for(int i=0;i<pFriendList->count();i++){pCB = new QCheckBox(pFriendList->item(i)->text());m_FriendWVBL->addWidget(pCB);m_pButtonGroup->addButton(pCB);}m_pSA->setWidget(m_pFriendW);
}
1.12、共享文件函数
void Book::shareFile()
{//获得好友列表Friend *pFriend = OpeWidget::getInstance().getFriend();QListWidget *pFriendList = pFriend->getFriendlist();ShareFile::getinstance().updateFriend(pFriendList);
}
测试一下