21

Re: С++ Qt ввід і вивід полів через перевантажені оператори >> <<

Тоді можете його викласти для прийдешніх поколінь?

22

Re: С++ Qt ввід і вивід полів через перевантажені оператори >> <<

Це ви про те, щоб закинути сюди готовий код? В такому випадку без проблем. Лише трохи його покращу(в плані читабельності) і викладу сюди.

Подякували: koala, FakiNyan2

23 Востаннє редагувалося andriymatiiv (15.04.2019 21:01:20)

Re: С++ Qt ввід і вивід полів через перевантажені оператори >> <<

Ось я додаю готовий код для вирішення заданої проблеми. Наперед скажу, що створений клас MyFrame має 3 поля типу QLineEdit. Перевантажені оператори >> << використовуються для вводу  полів в моєму кастомному класі Triangle  - сторін трикутника з форми(фрейму) та виводу їх на форму.(вибачте, але розбивку на файли не зробив - не знаю як це тут робити)

Клас MyFrame(оголошення)

#ifndef MYFRAME_H
#define MYFRAME_H

//#include <interface.h>
//#include <qwidget.h>
#include <QTextEdit>
#include <QLineEdit>
#include<QFrame>

class MyFrame : public QFrame
{
    Q_OBJECT
public:
    explicit MyFrame(QWidget *parent = nullptr);

    QLineEdit * sideA;
    QLineEdit * sideB;//= new QLineEdit(this);
    QLineEdit * sideC;//=new QLineEdit(this);
};
MyFrame& operator >> (MyFrame &frame, Triangle *itemm);
MyFrame&  operator << (MyFrame &frame, Triangle *item);

#endif // MYFRAME_H

MyFrame.cpp

#include "myframe.h"

MyFrame::MyFrame(QWidget *parent):QFrame(parent)
   {
       sideA =new QLineEdit(this);
       sideB= new QLineEdit(this);
       sideC=new QLineEdit(this);
       sideA->setObjectName(QString::fromUtf8("sideA"));
       sideA->setGeometry(QRect(10,10,120,25));
       sideB->setObjectName(QString::fromUtf8("sideB"));
       sideB->setGeometry(QRect(10,40,120,25));
       sideC->setObjectName(QString::fromUtf8("sideC"));
       sideC->setGeometry(QRect(10,70,120,25));
   }

перевантажені оператори << >>

MyFrame& operator << (MyFrame &frame, Triangle *item)
{
    frame.sideA->setText(QString::number(item->getA()));
    frame.sideB->setText(QString::number(item->getB()));
    frame.sideC->setText(QString::number(item->getC()));
    return frame;
}

MyFrame& operator >> (MyFrame &frame, Triangle *itemm)
{
    bool ok=false;
    itemm->setA(frame.sideA->text().toDouble(&ok));
    if(!ok) abort();
    itemm->setB(frame.sideB->text().toDouble(&ok));
    if(!ok) abort();
    itemm->setC(frame.sideC->text().toDouble(&ok));
    if(!ok) abort();
    return frame;
}

Виклик

...
ui->setupUi(this);//формування інтерфейсу разом з кастомним фреймом(в редакторі потрібно додати фрейм з назвою класу-MyFrame)
*ui->frame >> item;...//там, де вам потрібно