Я использую QSqlTableModel для получения данных из требуемой таблицы и визуализирую их в графическом интерфейсе с помощью QTableView. Проблема, которая возникла у меня сейчас, заключается в том, что я хочу изменить разные поля (преобразовать их) с существующего значения на другое (enum -> String). Например, существующее значение 1 должно отображаться как ОШИБКА в столбце QTableView.
Насколько я понимаю (поправьте меня, если я ошибаюсь), я должен использовать делегатов.
backupTableView->setItemDelegateForColumn(4, new StatusFormatDelegate());
Столбец, который следует изменить в этом случае, - это №4.
Есть ли другой способ реализовать это, и в обоих случаях (да / нет) я могу получить пример?
P.S. Данные не должны редактироваться.
До сих пор StatusFormatDelegate должен выглядеть примерно так:
class StatusFormatDelegate : public QStyledItemDelegate
{
public:
StatusFormatDelegate (quint64 dataFromQTableView, QObject *parent = 0) :
QStyledItemDelegate(parent),
columnData_(dataFromQTableView)
{
}
virtual QString displayText(const QVariant & value, const QLocale & locale ) const
{
Q_UNUSED(locale);
switch(columnData_){
case JobStatus_Failed: return "Failed";
case JobStatus_Finished: return "Finished";
case JobStatus_InProgress: return "In progress";
case JobStatus_NotStarted: return "Not started";
default: return "Unknown type";
}
}
private:
quint64 columnData_;
};
Это метод, который создает Модель -> Просмотр
void TransferHistory::fillBackUpPageFromDb()
{
connectToDb();
QSqlTableModel *model = new QSqlTableModel(this, db);
model->setTable("backup_history");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
model->setHeaderData(0, Qt::Horizontal, tr("Id"));
model->setHeaderData(1, Qt::Horizontal, tr("File"));
model->setHeaderData(2, Qt::Horizontal, tr("Size"));
model->setHeaderData(3, Qt::Horizontal, tr("Back-up Time"));
model->setHeaderData(4, Qt::Horizontal, tr("Status"));
ui->backupTableView = new QTableView(this->ui->tabWidget->currentWidget());
ui->backupTableView->setModel(model);
ui->backupTableView->hideColumn(0);
ui->backupTableView->setShowGrid(false);
ui->backupTableView->setSortingEnabled(true);
int width = ui->tabWidget->currentWidget()->width();
ui->backupTableView->setFixedSize(ui->tabWidget->currentWidget()->size());
**ui->backupTableView->setItemDelegateForColumn(4, new StatusFormatDelegate(someData, this));**
ui->backupTableView->setColumnWidth(1, static_cast<int>(FILECOLUMNWIDTH_PERCENT * width));
ui->backupTableView->setColumnWidth(2, static_cast<int>(SIZECOLUMNWIDTH_PERCENT * width));
ui->backupTableView->setColumnWidth(3, static_cast<int>(TIMECOLUMN_PERCENT * width));
ui->backupTableView->setColumnWidth(4, static_cast<int>(STATUSCOLUMN_PERCENT * width) - qApp->style()->pixelMetric(QStyle::PM_ScrollBarExtent) - 2);
ui->backupTableView->show();
}