Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
develop:qt:model-view [2021/11/03 07:24] admin |
develop:qt:model-view [2021/11/18 05:32] (текущий) admin |
||
---|---|---|---|
Строка 40: | Строка 40: | ||
< | < | ||
< | < | ||
+ | :?: В ф-ции **beginInsertColumn**/ | ||
+ | :?: Вставлять элементы можно как сразу в объект хранения (вектор/ | ||
+ | |||
+ | |||
<code cpp-qt> | <code cpp-qt> | ||
- | class myTableModel; | + | class VectorTableModel; |
class MWin : public QMainWindow | class MWin : public QMainWindow | ||
Строка 47: | Строка 51: | ||
Q_OBJECT | Q_OBJECT | ||
- | | + | |
QTableView *VViewTab; | QTableView *VViewTab; | ||
QLineEdit *editDataForWrite; | QLineEdit *editDataForWrite; | ||
Строка 63: | Строка 67: | ||
- | class myTableModel: public QAbstractTableModel | + | class VectorTableModel: public QAbstractTableModel |
{ | { | ||
Q_OBJECT | Q_OBJECT | ||
- | | + | |
- | | + | |
- | // содержимое таблицы ведь не удаляется | + | |
- | QList<QString *> ListHeaders; | + | |
public: | public: | ||
- | | + | |
- | + | | |
- | // Минимальные | + | |
+ | // Минимальные | ||
QVariant data(const QModelIndex &index, int role= Qt:: | QVariant data(const QModelIndex &index, int role= Qt:: | ||
int rowCount(const QModelIndex & | int rowCount(const QModelIndex & | ||
int columnCount(const QModelIndex & | int columnCount(const QModelIndex & | ||
+ | | ||
// Переопределенные | // Переопределенные | ||
QVariant headerData(int section, Qt:: | QVariant headerData(int section, Qt:: | ||
bool setData(const QModelIndex &index, const QVariant &value, int role); | bool setData(const QModelIndex &index, const QVariant &value, int role); | ||
+ | | ||
+ | // Собственные | ||
+ | void addRow(const QVector< | ||
+ | void addColumn(qint32 vCount); | ||
+ | void delRow(const qint32 & | ||
+ | void delColumn(const qint32 & | ||
- | // Собственные | ||
- | void addDataRow(const QList< | ||
- | void addColumn(const QString& | ||
- | void delRow(qint32 NumberRow); | ||
- | void delColumn(qint32 NumberCol); | ||
}; | }; | ||
</ | </ | ||
Строка 94: | Строка 98: | ||
<code cpp-qt> | <code cpp-qt> | ||
#include " | #include " | ||
- | |||
MWin:: | MWin:: | ||
{ | { | ||
- | VModelTab= new myTableModel(this); | + | VModelTab= new VectorTableModel(this); |
VViewTab= new QTableView(this); | VViewTab= new QTableView(this); | ||
VViewTab-> | VViewTab-> | ||
Строка 126: | Строка 129: | ||
myWindow-> | myWindow-> | ||
setCentralWidget(myWindow); | setCentralWidget(myWindow); | ||
- | |||
connect(butAddRecord, | connect(butAddRecord, | ||
Строка 153: | Строка 155: | ||
if(editDataForWrite-> | if(editDataForWrite-> | ||
{ | { | ||
- | QMessageBox:: | + | QMessageBox:: |
return; | return; | ||
} | } | ||
- | VModelTab-> | + | VModelTab-> |
editDataForWrite-> | editDataForWrite-> | ||
editDataForWrite-> | editDataForWrite-> | ||
Строка 177: | Строка 179: | ||
// | // | ||
- | myTableModel::myTableModel(QObject *parent): QAbstractTableModel(parent) | + | VectorTableModel::VectorTableModel(QObject *parent): QAbstractTableModel(parent) |
{ | { | ||
+ | LisIsData= new QVector< | ||
+ | HeadersList= new QVector< | ||
} | } | ||
- | // QList-> | + | |
- | // []- создает копию списка, | + | VectorTableModel::~VectorTableModel() |
- | QVariant myTableModel::data(const QModelIndex &index, int role) const | + | |
{ | { | ||
- | | + | |
- | | + | |
- | | + | |
+ | | ||
+ | delete HeadersList; | ||
} | } | ||
- | int myTableModel::columnCount(const QModelIndex &parent) const | + | QVariant VectorTableModel::data(const QModelIndex &index, int role) const |
{ | { | ||
- | | + | |
- | return | + | return LisIsData-> |
+ | return | ||
} | } | ||
- | int myTableModel:: | + | int VectorTableModel:: |
{ | { | ||
Q_UNUSED(parent); | Q_UNUSED(parent); | ||
- | return | + | return |
} | } | ||
- | void myTableModel::addDataRow(const | + | int VectorTableModel::columnCount(const |
{ | { | ||
- | | + | |
- | // вставляем мы тут по одной, хз, с нолями работает, | + | |
- | | + | |
- | myDataInCell.append(new QList< | + | |
- | this->endInsertRows(); | + | |
} | } | ||
- | QVariant | + | QVariant |
{ | { | ||
- | if(role != Qt:: | + | if(role!= Qt:: |
return QVariant(); | return QVariant(); | ||
- | | + | |
- | return | + | |
+ | return | ||
else | else | ||
- | return QString:: | + | return QString:: |
} | } | ||
- | void myTableModel::addColumn(const | + | bool VectorTableModel::setData(const |
{ | { | ||
- | | + | |
- | | + | |
- | | + | LisIsData-> |
+ | emit dataChanged(index, index); | ||
+ | return true; | ||
+ | } | ||
+ | |||
+ | return false; | ||
} | } | ||
- | void myTableModel::delRow(qint32 NumberRow) | + | |
+ | void VectorTableModel::addRow(const QVector< | ||
{ | { | ||
- | | + | |
- | | + | |
- | myDataInCell.removeAt(NumberRow); | + | |
- | this->endRemoveRows(); | + | |
+ | | ||
+ | vNewRow-> | ||
+ | |||
+ | else if(columnCount() < vNewRow-> | ||
+ | { | ||
+ | beginInsertColumns(QModelIndex(), | ||
+ | |||
+ | for(qint32 i= 0; i < LisIsData-> | ||
+ | LisIsData-> | ||
+ | |||
+ | endInsertColumns(); | ||
+ | } | ||
+ | |||
+ | LisIsData-> | ||
+ | endInsertRows(); | ||
} | } | ||
- | void myTableModel::delColumn(qint32 | + | void VectorTableModel::addColumn(qint32 |
{ | { | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
} | } | ||
- | // Еще не используется, | + | void VectorTableModel::delRow(const |
- | bool myTableModel::setData(const | + | |
{ | { | ||
- | | + | |
- | | + | |
- | // ??? Проверка границ списка ??? | + | |
- | myDataInCell[index.row()]->replace(index.column(), value.toString()); | + | |
- | | + | } |
- | | + | |
- | } | + | |
- | return false; | + | |
+ | void VectorTableModel:: | ||
+ | { | ||
+ | beginInsertColumns(QModelIndex(), | ||
+ | if(HeadersList-> | ||
+ | HeadersList-> | ||
+ | |||
+ | for(qint32 i= 0; i < LisIsData-> | ||
+ | LisIsData-> | ||
+ | endInsertColumns(); | ||
} | } | ||
</ | </ |