Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
develop:qt:model-view [2021/11/01 05:52] admin |
develop:qt:model-view [2021/11/18 05:32] (текущий) admin |
||
---|---|---|---|
Строка 39: | Строка 39: | ||
< | < | ||
- | < | + | < |
- | Отображение на форме не указано, самое обычное | + | :?: В ф-ции **beginInsertColumn**/ |
+ | :?: Вставлять элементы можно как сразу в объект хранения (вектор/ | ||
+ | |||
<code cpp-qt> | <code cpp-qt> | ||
- | class myTableModel: public | + | class VectorTableModel; |
+ | |||
+ | class MWin : public | ||
{ | { | ||
Q_OBJECT | Q_OBJECT | ||
- | | + | |
- | | + | |
+ | QLineEdit *editDataForWrite; | ||
+ | QPushButton *butAddRecord, | ||
public: | public: | ||
- | | + | |
+ | public slots: | ||
+ | void slotInsertNewRecord(); | ||
+ | void slotInsertNewColumn(); | ||
+ | void slotDeleteSelectedRecord(); | ||
+ | void slotDeleteSelectedColumn(); | ||
+ | }; | ||
+ | |||
+ | |||
+ | class VectorTableModel: | ||
+ | { | ||
+ | Q_OBJECT | ||
+ | |||
+ | QVector< | ||
+ | QVector< | ||
+ | |||
+ | public: | ||
+ | VectorTableModel(QObject *parent= nullptr); | ||
+ | ~VectorTableModel(); | ||
+ | | ||
+ | // Минимальные | ||
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:: | ||
+ | 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 & | ||
+ | |||
}; | }; | ||
</ | </ | ||
<code cpp-qt> | <code cpp-qt> | ||
- | myTableModel::myTableModel(QObject | + | #include " |
+ | |||
+ | MWin::MWin(QWidget | ||
{ | { | ||
- | | + | |
+ | VViewTab= new QTableView(this); | ||
+ | VViewTab-> | ||
+ | VViewTab-> | ||
- | | + | |
- | QList< | + | |
- | | + | |
- | | + | |
- | myDataInCell.append(vTemp); | + | |
- | | + | |
- | | + | layCtrls->addWidget(editDataForWrite, |
- | | + | |
- | | + | |
+ | |||
+ | butDelRecord= new QPushButton("Удалить строку", this); | ||
+ | butDelColumn= new QPushButton(" | ||
+ | QHBoxLayout *laySecondCtrls= new QHBoxLayout(); | ||
+ | laySecondCtrls-> | ||
+ | laySecondCtrls-> | ||
+ | |||
+ | QVBoxLayout *layMain= new QVBoxLayout(); | ||
+ | layMain-> | ||
+ | layMain-> | ||
+ | layMain-> | ||
+ | |||
+ | QWidget *myWindow= new QWidget(); | ||
+ | myWindow-> | ||
+ | setCentralWidget(myWindow); | ||
+ | |||
+ | connect(butAddRecord, | ||
+ | connect(butAddColumn, | ||
+ | connect(butDelRecord, | ||
+ | | ||
} | } | ||
- | QVariant myTableModel::data(const QModelIndex &index, int role) const | + | void MWin::slotInsertNewRecord() |
{ | { | ||
- | if(role== Qt:: | + | if(editDataForWrite-> |
{ | { | ||
- | | + | |
+ | return; | ||
} | } | ||
+ | VModelTab-> | ||
+ | editDataForWrite-> | ||
+ | editDataForWrite-> | ||
+ | } | ||
+ | |||
+ | |||
+ | void MWin:: | ||
+ | { | ||
+ | if(editDataForWrite-> | ||
+ | { | ||
+ | QMessageBox:: | ||
+ | return; | ||
+ | } | ||
+ | VModelTab-> | ||
+ | editDataForWrite-> | ||
+ | editDataForWrite-> | ||
+ | } | ||
+ | |||
+ | |||
+ | void MWin:: | ||
+ | { | ||
+ | VModelTab-> | ||
+ | } | ||
+ | |||
+ | |||
+ | void MWin:: | ||
+ | { | ||
+ | VModelTab-> | ||
+ | } | ||
+ | |||
+ | |||
+ | // | ||
+ | // | ||
+ | |||
+ | VectorTableModel:: | ||
+ | { | ||
+ | LisIsData= new QVector< | ||
+ | HeadersList= new QVector< | ||
+ | } | ||
+ | |||
+ | |||
+ | VectorTableModel:: | ||
+ | { | ||
+ | while(!LisIsData-> | ||
+ | delete LisIsData-> | ||
+ | |||
+ | delete LisIsData; | ||
+ | delete HeadersList; | ||
+ | } | ||
+ | |||
+ | |||
+ | QVariant VectorTableModel:: | ||
+ | { | ||
+ | if(role== Qt:: | ||
+ | return LisIsData-> | ||
return QVariant(); | return QVariant(); | ||
} | } | ||
- | int myTableModel::columnCount(const QModelIndex & | + | int VectorTableModel::rowCount(const QModelIndex & |
{ | { | ||
- | Q_UNUSED(parent); | + | Q_UNUSED(parent); |
- | return | + | return |
} | } | ||
- | int myTableModel::rowCount(const QModelIndex & | + | int VectorTableModel::columnCount(const QModelIndex & |
{ | { | ||
Q_UNUSED(parent); | Q_UNUSED(parent); | ||
- | return | + | return |
+ | } | ||
+ | |||
+ | |||
+ | QVariant VectorTableModel:: | ||
+ | { | ||
+ | if(role!= Qt:: | ||
+ | return QVariant(); | ||
+ | |||
+ | if(orientation== Qt:: | ||
+ | return HeadersList-> | ||
+ | else | ||
+ | return QString:: | ||
+ | } | ||
+ | |||
+ | |||
+ | bool VectorTableModel:: | ||
+ | { | ||
+ | if(index.isValid() && role== Qt:: | ||
+ | { | ||
+ | LisIsData-> | ||
+ | emit dataChanged(index, | ||
+ | return true; | ||
+ | } | ||
+ | |||
+ | return false; | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | void VectorTableModel:: | ||
+ | { | ||
+ | beginInsertRows(QModelIndex(), | ||
+ | QVector< | ||
+ | |||
+ | // Подгоняем кол-во столбцов, | ||
+ | if(columnCount() > vNewRow-> | ||
+ | vNewRow-> | ||
+ | |||
+ | else if(columnCount() < vNewRow-> | ||
+ | { | ||
+ | beginInsertColumns(QModelIndex(), | ||
+ | |||
+ | for(qint32 i= 0; i < LisIsData-> | ||
+ | LisIsData-> | ||
+ | |||
+ | endInsertColumns(); | ||
+ | } | ||
+ | |||
+ | LisIsData-> | ||
+ | endInsertRows(); | ||
+ | } | ||
+ | |||
+ | |||
+ | void VectorTableModel:: | ||
+ | { | ||
+ | beginInsertColumns(QModelIndex(), | ||
+ | while(vCount--) | ||
+ | this-> | ||
+ | endInsertColumns(); | ||
+ | } | ||
+ | |||
+ | |||
+ | void VectorTableModel:: | ||
+ | { | ||
+ | beginInsertRows(QModelIndex(), | ||
+ | if(LisIsData-> | ||
+ | LisIsData-> | ||
+ | endInsertRows(); | ||
+ | } | ||
+ | |||
+ | |||
+ | void VectorTableModel:: | ||
+ | { | ||
+ | beginInsertColumns(QModelIndex(), | ||
+ | if(HeadersList-> | ||
+ | HeadersList-> | ||
+ | |||
+ | for(qint32 i= 0; i < LisIsData-> | ||
+ | LisIsData-> | ||
+ | endInsertColumns(); | ||
} | } | ||
</ | </ |