Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2503|回复: 8
打印 上一主题 下一主题

Qt常见容器使用

[复制链接]

257

主题

354

帖子

1677

积分

金牌会员

Rank: 6Rank: 6

积分
1677
跳转到指定楼层
楼主
发表于 2016-12-7 09:44:11 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jimu 于 2016-12-7 10:35 编辑

1.QVector
QVector<QReadMailWindow *> m_pVecReadMailWindows;
//循环删除
  1. for (int i = 0; i < m_pVecReadMailWindows.size(); i++)
  2. {
  3.         if (m_pVecReadMailWindows.at(i) != NULL)
  4.         {
  5.                 delete m_pVecReadMailWindows.at(i);
  6.                 m_pVecReadMailWindows.erase(m_pVecReadMailWindows.begin() + i);
  7.         }
  8. }
复制代码
//添加
  1. QReadMailWindow *rWin = new QReadMailWindow(mailId);
  2.     m_pVecReadMailWindows.push_back(rWin);
复制代码
//查询
  1. foreach(QReadMailWindow * rWin, m_pVecReadMailWindows)
  2.     {
  3.         if (rWin->getCloseStatus())
  4.         {
  5.             return rWin;
  6.         }
  7.     }
复制代码
qFind 查询 to implement operator==().

struct UserOperateAction
{
    UserOperateAction()
    : serverId(DEFAULT_VALUE_ZERO)
    , operType(UOAT_UNKNOWE)
    {
    }
    uint32_t serverId;
    QString listPath;
    QString uid;
    int operType;
    bool operator == (const UserOperateAction& rhs) const
    {
        return (serverId == rhs.serverId &&
            listPath == rhs.listPath &&
            uid == rhs.uid &&
            operType == rhs.operType);
    }
};


bool queryUserOperAct(const UserOperateAction & stUserOperateAction)
{
    QVector<UserOperateAction>::const_iterator itFind = qFind(m_vecUserOperActs.begin(), m_vecUserOperActs.end(), stUserOperateAction);
    if (itFind != m_vecUserOperActs.end())
    {
        return true;
    }
    return false;
}


bool clearUserOperAct()
{
    for (int i = 0; i < m_vecUserOperActs.size(); i++)
    {
        m_vecUserOperActs.erase(m_vecUserOperActs.begin() + i);
    }
}

bool removeUserOperAct(const UserOperateAction & stUserOperateAction)
{
    QMutexLocker locker(&m_userOperActMutex);
    QVector<UserOperateAction>::iterator itFind = qFind(m_vecUserOperActs.begin(), m_vecUserOperActs.end(), stUserOperateAction);
    if (itFind != m_vecUserOperActs.end())
    {
        m_vecUserOperActs.erase(itFind);
    }
    return true;
}



2.QList
QMutex  m_folderMutex;
QMutexLocker locker(&m_folderMutex);

QList<MailFolderInfo> m_listMailFoldersData;

//查询
for (int i = 0; i < m_listMailFoldersData.size(); ++i)
{
        if (m_listMailFoldersData.at(i).parentId == parentId)
        {
                return m_listMailFoldersData.at(i).rowId;
        }

}

//排序

qSort(m_listMailFoldersData.begin(), m_listMailFoldersData.end(), folderSortAlgorithm);

bool folderSortAlgorithm(const MailFolderInfo &mfi1, const MailFolderInfo &mfi2)
{
    return mfi1.name < mfi2.name
}

//添加
bool addMailFolder(MailFolderInfo&  stMailFolderInfo)
{
    QMutexLocker locker(&m_folderMutex);
    m_listMailFoldersData.push_back(stMailFolderInfo);
}

//删除

bool CMemoryDBManager::deleteMailFolder(uint32_t folderId)
{
    QMutexLocker locker(&m_folderMutex);
    for (int i = 0; i < m_listMailFoldersData.size(); ++i) {
        if (m_listMailFoldersData.at(i).rowId == folderId){
            m_listMailFoldersData.removeAt(i);
            break;
        }
    }
}

//修改
bool updateMailFolderLegalMailCount(uint32_t folderId, uint32_t count)
{
    QMutexLocker locker(&m_folderMutex);
    for (int i = 0; i < m_listMailFoldersData.size(); ++i) {
        if (m_listMailFoldersData.at(i).rowId == folderId){
            m_listMailFoldersData.legalMailCountOnServer = count;
            break;
        }
    }
    return true;
}


3.QMap

//查询 不能用 [] 防止引入 新元素
MailHeaderInfo getMailHeader(uint64_t mailId)
{
    QMapIterator<uint32_t, MemoryMailData> iter(m_mapMailMemoryData);
    while (iter.hasNext()) {
        iter.next();
        for (int i = 0; i < iter.value().vecMailIndexDatas.size(); ++i) {
            if (iter.value().vecMailIndexDatas.at(i).mailId == mailId){
                return iter.value().vecMailIndexDatas.at(i);
            }
        }
    }
}




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-5-3 17:05 , Processed in 0.066252 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表