pozwolę sobie zrobić mały update pierwszego postu. Poradziłem sobie z problemem wyświetlania rekordów w widoku. Wszystko się rozeszło o właściwe zrozumienie jak odwołać się do wskaźnika metody wirtualnej, jest to pokazane w pliku mainwindow.cpp
w miejscu absModel = new MyModel();
no więc kod jest taki:
- Klasa MainWindow
plik mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QWidget>
#include <QGridLayout>
#include <QTabWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QAbstractItemModel>
#include <QTableView>
class MyModel;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QWidget *mainWigdet, *widgetTab1, *widgetTab2;
QGridLayout *mainLayout;
QTabWidget *mainTabWidget;
QVBoxLayout *layout1;
QHBoxLayout *BttLayout1;
QAbstractItemModel *absModel;
QTableView *view;
};
#endif // MAINWINDOW_H
plik mainwindow.cpp
#include "mainwindow.h"
#include "mymodel.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
//![1]
mainWigdet = new QWidget(this);
//![/1]
//![2]
mainLayout = new QGridLayout(mainWigdet);
//![/2]
//![3]
mainTabWidget = new QTabWidget(mainWigdet);
//![/3]
//![4]
widgetTab1 = new QWidget(mainTabWidget);
widgetTab2 = new QWidget(mainTabWidget);
//![/4]
mainTabWidget->addTab(widgetTab1, "Widok");
layout1 = new QVBoxLayout();
absModel = new MyModel();
//absModel->rowCount();
//absModel->columnCount();
view = new QTableView();
view->setModel(absModel);
mainWigdet->setLayout(mainLayout);
mainLayout->addWidget(mainTabWidget,0,0);
widgetTab1->setLayout(layout1);
layout1->addWidget(view);
this->setCentralWidget(mainWigdet);
}
MainWindow::~MainWindow()
{
}
- Klasa MyModel
plik mymodel.h
#ifndef MYMODEL_H
#define MYMODEL_H
#include <QAbstractItemModel>
class MyModel : public QAbstractItemModel
{
public:
MyModel(QWidget *parent=nullptr);
static int _column, _row;
QModelIndex _parent;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
QModelIndex parent(const QModelIndex &index) const override;
};
#endif // MYMODEL_H
plik mymodel.cpp
#include "mymodel.h"
#include <QDebug>
int MyModel::_row=5;
int MyModel::_column=3;
MyModel::MyModel(QWidget *parent)
{
}
int MyModel::columnCount(const QModelIndex &parent) const
{
qDebug()<<"funkcja columnCount"<<_column;
return _column;
}
int MyModel::rowCount(const QModelIndex &parent) const
{
qDebug()<<"funkcja rowCount"<<_row;
return _row;
}
QVariant MyModel::data(const QModelIndex &index, int role) const
{
}
QModelIndex MyModel::index(int row, int column, const QModelIndex &parent) const
{
qDebug()<< "wykonala sie funkcja index";
qDebug()<< "parent"<<_parent.parent();
return _parent;
}
QModelIndex MyModel::parent(const QModelIndex &index) const
{
}
bool MyModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
}
No i widzę stworzone przez siebie kolumny i wiersze oraz zastanawiam się dalej co trzeba zrobić. W sumie się domyślam, że trzeba te metody jakoś ogólnie oprogramować co mają robić, potem dodać jakąś klasę z zapytaniami QSqlQuery
i przekierować te zapytanie do funkcji MyModel::setData
i zobaczyć efekty ale jeszcze muszę wiedzieć ile ma wierszy i kolumn tabela w bazie itp...
Jak macie jakieś uwagi (nawet te krytyczne), pomysły, propozycje to podzielcie się.