追加添加后台任务显示视图未提交文件

This commit is contained in:
徐海 2026-05-25 10:40:44 +08:00
parent 8c96ce6101
commit 8dd2f44dc5
2 changed files with 125 additions and 0 deletions

View File

@ -0,0 +1,88 @@
#include "BackgroundTaskListModel.h"
#include "DataProcessWorkPool.h"
BackgroundTaskListModel* BackgroundTaskListModel::_s_instance = nullptr;
BackgroundTaskListModel *BackgroundTaskListModel::Instance()
{
if (!_s_instance) {
_s_instance = new BackgroundTaskListModel();
}
return _s_instance;
}
BackgroundTaskListModel::~BackgroundTaskListModel()
{
Clear();
}
BackgroundTaskListModel::BackgroundTaskListModel(QObject *parent)
: QAbstractTableModel(parent)
{
}
int BackgroundTaskListModel::rowCount(const QModelIndex &parent) const
{
if (parent.isValid())
return 0;
return _task_list.size();
}
int BackgroundTaskListModel::columnCount(const QModelIndex &parent) const
{
return parent.isValid() ? 0 : 3;
}
QVariant BackgroundTaskListModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
int row = index.row();
int col = index.column();
if (row < 0 || row >= _task_list.size())
return QVariant();
if (role == Qt::DisplayRole) {
switch(col) {
case 0: return row + 1;
case 2: return _task_list.at(row)->GetTaskName();
default: return QVariant();
}
}
return QVariant();
}
int BackgroundTaskListModel::findTaskIndexByName(const QString &task_name)
{
for (int i = 0; i < _task_list.size(); ++i) {
if (_task_list[i]->GetTaskName() == task_name) {
return i;
}
}
return -1;
}
void BackgroundTaskListModel::InserTask(DataProcessWorkPool::DataProcessTask* task)
{
beginInsertRows(QModelIndex(), _task_list.size(), _task_list.size());
_task_list.append(task);
endInsertRows();
}
void BackgroundTaskListModel::RemoveTask(const QString &task_name)
{
int index = findTaskIndexByName(task_name);
if (index < 0) {
return;
}
beginRemoveRows(QModelIndex(), _task_list.size(), _task_list.size());
_task_list.removeAt(index);
endRemoveRows();
}
void BackgroundTaskListModel::Clear()
{
}

View File

@ -0,0 +1,37 @@
#ifndef BACKGROUNDTASKLISTMODEL_H
#define BACKGROUNDTASKLISTMODEL_H
#include <QAbstractTableModel>
#include <QObject>
namespace DataProcessWorkPool {
class DataProcessTask;
}
class BackgroundTaskListModel : public QAbstractTableModel
{
Q_OBJECT
public:
static BackgroundTaskListModel* Instance();
virtual ~BackgroundTaskListModel();
void InserTask(DataProcessWorkPool::DataProcessTask *task);
void RemoveTask(const QString& task_name);
void Clear();
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
private:
int findTaskIndexByName(const QString& task_name);
private:
explicit BackgroundTaskListModel(QObject *parent = nullptr);
static BackgroundTaskListModel* _s_instance;
private:
QList<DataProcessWorkPool::DataProcessTask*> _task_list;
};
#endif // BACKGROUNDTASKLISTMODEL_H