forked from openkylin/ukui-search
优化搜索结果UI刷新逻辑,添加定时器一定条件下定时刷新;
This commit is contained in:
parent
7d5792eabb
commit
988e845d69
|
@ -26,6 +26,8 @@ SearchResultModel::SearchResultModel(const QString &plugin_id)
|
||||||
m_item = new SearchResultItem;
|
m_item = new SearchResultItem;
|
||||||
m_plugin_id = plugin_id;
|
m_plugin_id = plugin_id;
|
||||||
m_search_manager = new SearchResultManager(plugin_id);
|
m_search_manager = new SearchResultManager(plugin_id);
|
||||||
|
m_timer = new QTimer(this);
|
||||||
|
m_timer->setInterval(500);
|
||||||
initConnections();
|
initConnections();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,17 +69,22 @@ QVariant SearchResultModel::data(const QModelIndex &index, int role) const
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
//bool SearchResultModel::insertRows(int row, int count, const QModelIndex &parent)
|
void SearchResultModel::appendInfo(const SearchPluginIface::ResultInfo &info)//TODO 代码逻辑可尝试梳理优化
|
||||||
//{
|
|
||||||
// this->beginInsertRows(parent, row, count);
|
|
||||||
// this->endInsertRows();
|
|
||||||
// return true;
|
|
||||||
//}
|
|
||||||
|
|
||||||
void SearchResultModel::appendInfo(const SearchPluginIface::ResultInfo &info)
|
|
||||||
{
|
{
|
||||||
|
if (m_item->m_result_info_list.length() > 5 //搜索结果大于5个并且搜索结果处于收起状态时只存储数据无需刷新UI
|
||||||
|
and !m_isExpanded) {
|
||||||
|
m_item->m_result_info_list.append(info);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (m_item->m_result_info_list.length() > 50
|
||||||
|
and m_isExpanded) {//搜索结果大于50个并且搜索结果处于展开状态时只存储数据并启动定时,500ms刷新一次UI
|
||||||
|
m_item->m_result_info_list.append(info);
|
||||||
|
if (!m_timer->isActive()) {
|
||||||
|
m_timer->start();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
this->beginResetModel();
|
this->beginResetModel();
|
||||||
//qDebug()<<"Got a result. name ="<<info.name;
|
|
||||||
m_item->m_result_info_list.append(info);
|
m_item->m_result_info_list.append(info);
|
||||||
this->endResetModel();
|
this->endResetModel();
|
||||||
Q_EMIT this->itemListChanged(m_item->m_result_info_list.length());
|
Q_EMIT this->itemListChanged(m_item->m_result_info_list.length());
|
||||||
|
@ -101,6 +108,10 @@ void SearchResultModel::initConnections()
|
||||||
{
|
{
|
||||||
connect(this, &SearchResultModel::stopSearch, m_search_manager, &SearchResultManager::stopSearch);
|
connect(this, &SearchResultModel::stopSearch, m_search_manager, &SearchResultManager::stopSearch);
|
||||||
connect(m_search_manager, &SearchResultManager::gotResultInfo, this, &SearchResultModel::appendInfo);
|
connect(m_search_manager, &SearchResultManager::gotResultInfo, this, &SearchResultModel::appendInfo);
|
||||||
|
connect(m_timer, &QTimer::timeout, [ = ] () {//500ms刷新一次UI,防止搜索结果数据量过大导致的UI卡顿
|
||||||
|
Q_EMIT this->itemListChanged(m_item->m_result_info_list.length());
|
||||||
|
m_timer->stop();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const SearchPluginIface::ResultInfo &SearchResultModel::getInfo(const QModelIndex &index)
|
const SearchPluginIface::ResultInfo &SearchResultModel::getInfo(const QModelIndex &index)
|
||||||
|
@ -137,7 +148,13 @@ QString SearchResultModel::getKey(const QModelIndex &index)
|
||||||
{
|
{
|
||||||
if (m_item->m_result_info_list.length() > index.row() && index.row() >= 0)
|
if (m_item->m_result_info_list.length() > index.row() && index.row() >= 0)
|
||||||
// return m_item->m_result_info_list.at(index.row()).key;
|
// return m_item->m_result_info_list.at(index.row()).key;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SearchResultModel::refresh()
|
||||||
|
{
|
||||||
|
this->beginResetModel();
|
||||||
|
this->endResetModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
SearchResultItem::SearchResultItem(QObject *parent) : QObject(parent)
|
SearchResultItem::SearchResultItem(QObject *parent) : QObject(parent)
|
||||||
|
|
|
@ -56,6 +56,7 @@ public:
|
||||||
const bool &isExpanded();
|
const bool &isExpanded();
|
||||||
QStringList getActions(const QModelIndex &);
|
QStringList getActions(const QModelIndex &);
|
||||||
QString getKey(const QModelIndex &);
|
QString getKey(const QModelIndex &);
|
||||||
|
void refresh();
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void appendInfo(const SearchPluginIface::ResultInfo &);
|
void appendInfo(const SearchPluginIface::ResultInfo &);
|
||||||
|
@ -72,6 +73,7 @@ private:
|
||||||
QString m_plugin_id;
|
QString m_plugin_id;
|
||||||
SearchResultManager * m_search_manager = nullptr;
|
SearchResultManager * m_search_manager = nullptr;
|
||||||
bool m_isExpanded = false;
|
bool m_isExpanded = false;
|
||||||
|
QTimer * m_timer;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -262,6 +262,9 @@ void ResultView::onItemListChanged(const int &count)
|
||||||
{
|
{
|
||||||
m_count = count;
|
m_count = count;
|
||||||
Q_EMIT this->listLengthChanged(count);
|
Q_EMIT this->listLengthChanged(count);
|
||||||
|
QModelIndex index = this->currentIndex();
|
||||||
|
m_model->refresh();
|
||||||
|
this->setCurrentIndex(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResultView::setExpanded(const bool &is_expanded)
|
void ResultView::setExpanded(const bool &is_expanded)
|
||||||
|
|
Loading…
Reference in New Issue