Как можно ограничить количество введенных символов qtableView?
Как можно ограничить количество введенных символов в строку "Событие"?
Вот код:
model = new QSqlTableModel(this,db);
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->setTable("TableEventBalancer");
model->select();
ui->tableView->setModel(model);
int id = QFontDatabase::addApplicationFont("/usr/share/fonts/dejavu/DejaVuSansMono.ttf");
QFont font = QFont(QFontDatabase::applicationFontFamilies(id).first());
font.setPointSize(12);
ui->tableView->setFont(font);
ui->tableView->horizontalHeader()->setResizeMode(0,QHeaderView::ResizeToContents);
ui->tableView->horizontalHeader()->setResizeMode(1,QHeaderView::ResizeToContents);
ui->tableView->horizontalHeader()->setResizeMode(2,QHeaderView::Stretch);
model->setHeaderData(model->fieldIndex("number"), Qt::Horizontal, QString::fromLocal8Bit("ID"));
model->setHeaderData(model->fieldIndex("_date"), Qt::Horizontal, QString::fromLocal8Bit("Дата"));
model->setHeaderData(model->fieldIndex("text"), Qt::Horizontal, QString::fromLocal8Bit("Событие"))
Ответы (1 шт):
Автор решения: Roman Ozhegov
→ Ссылка
Для того, чтобы выполнить задуманную Вами вещь необходимо перекрыть модель использованную Вами. Ниже привожу пример, ограничения вывода данных 3 символами на примере QStandardItemModel. Ваш конкретный пример, не беру поскольку придется поднимать базу данных (QSqlTableModel).
Файл customstringmodel.h:
#ifndef CUSTOMSTRINGMODEL_H
#define CUSTOMSTRINGMODEL_H
#include <QObject>
#include <QStandardItemModel>
class CustomStringModel: public QStandardItemModel
{
Q_OBJECT
public:
CustomStringModel(QObject *parent = nullptr);
// QAbstractItemModel interface
public:
virtual QVariant data(const QModelIndex &index, int role) const override;
};
#endif // CUSTOMSTRINGMODEL_H
Файл customstringmodel.cpp
#include "customstringmodel.h"
CustomStringModel::CustomStringModel(QObject *parent)
: QStandardItemModel(parent)
{
}
QVariant CustomStringModel::data(const QModelIndex &index, int role) const
{
if (role == Qt::DisplayRole){
QString str = QStandardItemModel::data(index, role).toString();
if (str.size() > 3) {
str.resize(3);
str+="...";
}
return str;
}
else {
return QStandardItemModel::data(index, role);
}
}
Использование: (не обращайте внимание на заполнение модели)
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
CustomStringModel *model = new CustomStringModel(this);
model->setRowCount(4);
model->setColumnCount(4);
for (int row = 0; row < 4; ++row){
QString test = "";
for (int col = 0; col < 4; ++col){
test+= QString::number(row);
QStandardItem * item = new QStandardItem(test);
model->setItem(row, col, item);
}
}
ui->tableView->setModel(model);
}
Ну и сам результат:
