Сообщество IT-специалистов
Ответы на любые вопросы об IT
Профессиональное развитие в IT
Удаленная работа для IT-специалистов
class MyCard { public: MyCard() = default; MyCard(const QString &name,const QString &author, int code, int subscription, int hall, int balance); friend int returnSum(); QString getNumber() const; void setNumber(const QString name); QString getName() const; void setName(const QString author); int getSum() const; void setSum(int code); MyCard(int code); int getProfit() const ; void setProfit(int subscription); int getRate() const; void setRate(int hall); int getBalance() const; void setBalance(int balance); friend QDataStream& operator<<(QDataStream& stream, const MyCard& card); friend QDataStream& operator>>(QDataStream& stream, MyCard& card); // friend QTextStream& operator<<(QTextStream& stream, MyCard& card); // friend QTextStream& operator>>(QTextStream& stream, MyCard& card); private: QString _number; QString _name; int _sum = 0; int _profit = 0; int _rate = 0; int _balance = 0; }; class Card: public QAbstractTableModel { Q_OBJECT public: explicit Card(QObject* parent = nullptr); MyCard returnList(); //explicit Card() // friend QDataStream& operator<<(QDataStream& stream, const MyCard& card); // friend QDataStream& operator>>(QDataStream& stream, Card& card); // QAbstractItemModel interface public: virtual int rowCount(const QModelIndex &parent) const override; virtual int columnCount(const QModelIndex &parent) const override; virtual QVariant data(const QModelIndex &index, int role) const override; void clearTable(MyCard card); // void clearTable2(MyCard card); virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const override; QList<MyCard> card() const; void setCard(const QList<MyCard> &card); //Card x(Card y); QVariant del(QModelIndex index, int role); void AddCard(const MyCard& card); // Добавляем пустую строку //void AddCard2(MyCard& card); // Добавляем пустую строку QVariant AddCard2(MyCard card); void AddNewCard(MyCard card); // Добавляем нову строку с данными void Remove(int f); const MyCard GetCard(); // friend QDataStream& operator<<(QDataStream& stream, const Card& card); // friend QDataStream& operator<<(QDataStream& stream, const Card& card); // friend QDataStream& operator>>(QDataStream& stream, Card& card); private: const MyCard x; QList<MyCard> _card; // QList<MyCard> card1; };
Card::Card(QObject *parent) : QAbstractTableModel(parent) { int sum = 800; int profit = 700; int rate = 300; int balance = sum + profit - rate; MyCard z("8812913", "Person1", (qint32)sum, (qint32)profit, (qint32)rate, (qint32)balance); _card<<z; int sum1 = 500; int profit1 = 600; int rate1 = 300; int balance1 = sum1 + profit1 - rate1; MyCard z1("7812913", "Person2", sum1, profit1, rate1, balance1); _card<<z1; } MyCard Card::returnList() { int sum = 800; int profit = 700; int rate = 300; int balance = sum + profit - rate; MyCard x("8812913", "Person1", (qint32)sum, (qint32)profit, (qint32)rate, (qint32)balance); return x; } int Card:: rowCount(const QModelIndex&) const { // Сколько карт, столько и строк return _card.size(); } int returnSum() { MyCard x; return x._sum; } int Card::columnCount(const QModelIndex&) const {// Сколько полей в классе Card, столько же колонок return 6; } // Значение ячейки в таблице// Параметр index указывает на ту ячейку, которую сейчас настраиваем// //role позволяет настраивать разные свойства ячейки QVariant Card:: data(const QModelIndex& index, int role) const {// role -отображаемый текст в ячейке if(role == Qt::DisplayRole) {// Находим карту, соответствующую текущей строке const MyCard& card =_card[index.row()]; // Возвращаем значение, соответствующее текущей колонке switch(index.column()) { case 0: return card.getNumber(); case 1: return card.getName(); case 2: return card.getSum(); case 3: return card.getProfit(); case 4: return card.getRate(); case 5: return card.getBalance(); } }// Для остальных ролей используем пустое значение QVariant() return QVariant(); } QVariant Card:: headerData(int section, Qt::Orientation orientation, int role) const {// Роль-отображаемыйтекст if(role == Qt::DisplayRole && orientation == Qt::Horizontal) {//Возвращаем значение, соответствующее текущей колонке switch(section) { case 0: return "Number"; case 1: return "Name"; case 2: return "Sum"; case 3: return "Profit"; case 4: return "Rate"; case 5: return "Balance"; } }// Для остальных ролей и заголовков строк используем поведение по умолчанию return QAbstractTableModel::headerData(section, orientation, role); } QList<MyCard> Card::card() const { return _card; } void Card::setCard(const QList<MyCard> &card) { _card = card; } MyCard::MyCard(const QString &number, const QString &name, int sum, int profit, int rate, int balance) { _number = number; _name = name; _sum = sum; _profit = profit; _rate = rate; balance = sum + profit - rate; _balance = balance; } int MyCard::getProfit() const { return _profit; } void MyCard::setProfit(int profit) { _profit = profit; } int MyCard::getRate() const { return _rate; } void MyCard::setRate(int rate) { _rate = rate; } int MyCard::getBalance() const { return _balance; } void MyCard::setBalance(int balance) { _balance = balance; } QString MyCard::getNumber() const { return _number; } void MyCard::setNumber( QString number) { _number = number; } QString MyCard::getName() const { return _name; } void MyCard::setName(QString name) { _name = name; } void MyCard::setSum(int sum) { _sum = sum; } int MyCard::getSum() const { return MyCard::_sum; }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); //Создаем нашу модель и связываем ее с представлением ui -> tableView -> setModel(&_card); } MainWindow::~MainWindow() { delete ui; }
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include "card.h" #include "QAbstractItemModel" #include "QTableView" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: // void on_pushButton_clicked(); // void on_pushButton2_clicked(); // void on_pushButton3_clicked(); void on_Read_triggered(); void on_Write_triggered(); void on_pushButton2_clicked(); signals: private: Ui::MainWindow *ui; Card _card; };
Card.h:
Card.cpp
MainWindow.cpp
MainWindow.h
Или это не то?