代码拉取完成,页面将自动刷新
同步操作将从 uenigma/linux_feiq 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "fellowlistwidget.h"
#include <QDebug>
FellowListWidget::FellowListWidget()
{
}
void FellowListWidget::bindTo(QListWidget *widget)
{
mWidget = widget;
connect(mWidget, &QListWidget::itemClicked, this, &FellowListWidget::itemChosen);
}
void FellowListWidget::update(const Fellow &fellow)
{
auto item = findFirstItem(fellow);
if (item == nullptr)
{
int row = requestRow(fellow);
mWidget->insertItem(row, fellowText(fellow));
item = mWidget->item(row);
}
else
{
item->setText(fellowText(fellow));
}
item->setData(Qt::UserRole, QVariant::fromValue((void *)&fellow));
}
void FellowListWidget::top(const Fellow &fellow)
{
auto item = findFirstItem(fellow);
if (item != nullptr)
{
mWidget->takeItem(mWidget->row(item));
mWidget->insertItem(0, item);
mWidget->scrollToItem(item);
mWidget->setCurrentItem(item);
}
}
//TODO:take->insert的方式或导致如果item是当前焦点,则移动后焦点丢失
void FellowListWidget::topSecond(const Fellow &fellow)
{
auto item = findFirstItem(fellow);
if (item != nullptr)
{
mWidget->takeItem(mWidget->row(item));
mWidget->insertItem(1, item);
}
}
void FellowListWidget::mark(const Fellow &fellow, const QString &info)
{
auto item = findFirstItem(fellow);
if (item != nullptr)
{
if (info.isEmpty())
item->setText(fellowText(fellow));
else
{
item->setText("(" + info + ")" + fellowText(fellow));
if (mWidget->row(item) != 0)
{
if (mWidget->currentRow() == 0)
topSecond(fellow);
else
top(fellow);
}
}
}
}
void FellowListWidget::setRankPredict(FellowListWidget::RankPredict predict)
{
mRankPredict = predict;
}
void FellowListWidget::itemChosen(QListWidgetItem *item)
{
if (item == nullptr)
return;
auto fellow = getFellow(item);
emit select(fellow);
}
QString FellowListWidget::fellowText(const Fellow &fellow)
{
auto text = fellow.getName() + "," + fellow.getIp();
if (!fellow.isOnLine())
{
text = "[离线]" + text;
}
return QString(text.c_str());
}
QListWidgetItem *FellowListWidget::findFirstItem(const Fellow &fellow)
{
auto count = mWidget->count();
for (int i = 0; i < count; i++)
{
auto widget = mWidget->item(i);
auto f = getFellow(widget);
if (f->getIp() == fellow.getIp())
return widget;
}
return nullptr;
}
int FellowListWidget::requestRow(const Fellow &fellow)
{
auto count = mWidget->count();
if (!mRankPredict)
return count;
int row = count;
for (; row > 0; row--)
{
auto f = getFellow(mWidget->item(row - 1));
auto ret = mRankPredict(*f, fellow);
if (ret >= 0)
break;
}
return row;
}
const Fellow *FellowListWidget::getFellow(const QListWidgetItem *item)
{
return static_cast<const Fellow *>(item->data(Qt::UserRole).value<void *>());
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。