1

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

Доброго дня.
така проблема. треба розробити клас, що міг би по функціоналу бути як фрейм(рамка) і за його допомогою можна використовувати перевантажені оператори » «  для вводу і виводу на форму.(умови від викладача в університеті) але так, щоб елементи цього класу можна створювати і з'являлись нові фрейми в інтерфейсі. Може хтось підказати як таке реалізувати?

пробував клас з полями у вигляді лайн едітів і через конструктор їм присвоював поля інтерфейсу:

class Frame
{
public:
    Frame();
    Frame(QLineEdit *sideA, QLineEdit *sideB,QLineEdit *sideC);

    QLineEdit *SideA;
    QLineEdit *SideB;
    QLineEdit *SideC;
};

bool operator >> (Frame &frame, Triangle *itemm);
void  operator << (Frame &frame, Triangle *item);

#endif // FRAME_
Frame::Frame(QLineEdit *sideA, QLineEdit *sideB, QLineEdit *sideC)
{
    SideA = sideA;
    SideB = sideB;
    SideC = sideC;
}

Ось виклик конструкора(аргументи - елементи мого інтерфейсу)

frame = Frame(ui->lineEditA, ui->lineEditB, ui->lineEditC);

потім в коді я викликаю перевантажений оператор

fgame<<item;

item - елемент мого класу поля якого треба заповняти або виводити операторами >> <<.(код операторів не додаю, так як їх реалізація,думаю, не важлива в цьому випадку)
Такий варіант нормально працює, та викладач так не хоче(через те що передаються аргументи). І от не можу знайти спосіб, як без цього обійтись. Допоможіть будь-ласка. Потрібні ідеї як це реалізувати. Наперед дякую за допомогу.

2

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

Якщо вам треба, що ваш Frame був частиною форми, вам, швидше за все, треба його успадкувати від якогось контролу (того ж QFrame, наприклад). Тоді елементи можна буде нормально створювати всередині конструктора, сам Frame ставити на форму, а виводити - або через (*ui->myFrame)<<..., або через перевантаження
void  operator << (Frame *frame, Triangle *item);

Подякували: leofun011

3

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

розумію, що банальне питання, але як це як це реалізується, я впринципі розумію логіку, але сам myFrame повинен створюватись наперед у інтерфейсі(його поля і тд.) чи це можна реалізувати в коді?

4

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

Для початку, ви ж розумієте, що з того, що ви накидали в інтерфейс Qt, генерується при компіляції звичайний код C++, який ви можете продивитися, скопіювати і т.д.?

5

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

Ну це зрозуміло) я знаю шо можна впринципі все організувати в коді,але ,чесно кажучи, я не зміг це зробити. Рівень моїх знань не дозволяє мені все зробити самостійно в коді (а гайдів я не зміг знайти). Можна елемент фрейм, створений в інтерфейсі назвати як елемент мого класу(в полі назва класу) але потім зустрів проблеми в тому, що з мого класу просто не бачить ці елементи((.

6

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

Ви можете просто глянути згенерований код, там нічого складного немає.
Щоб використовувати свій клас як елемент інтерфейсу, вам треба щось таке:

class MyFrame : public QFrame
{
  Q_OBJECT

  MyFrame(QWidget *parent = nullptr);
  virtual ~MyFrame ();
  /*ваші елементи, слоти, властивості, сигнали*/
}

Ну і звісно це виноситься в окремий файл. Ось офіційний туторіал: https://doc.qt.io/archives/3.3/designer-manual-7.html

Подякували: leofun01, andriymatiiv2

7

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

Дякую. Буду пробувати. Якщо будуть трабли - напишу.

Подякували: koala1

8

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

Все таки потрібна допомога((. Я перечитав море тексту, подивився декілька відео, що зміг знайти, та все ж ніякого розуміння що мені робити не маю. Я просто  не розумію як додавати елементи до мого Фрейма і потім виводити його. Знаю шо елемент(фрейм) створений в дизайнері можна  переназвати як елемент мого класу, але як з ним потім працювати хз. Хелп. пж. я просто вже не вивожу це. другий тиждень ламаю голову як це реалізувати(((((
https://replace.org.ua/uploads/images/9039/7aab3cb68cbf9325cded1b71a6a6b342.png ...https://replace.org.ua/uploads/images/9039/6e37b24315c3fa5db602011db2aa1ee7.png так я пробував приводити до назви свого класу(frame також, але зараз він як стандартний клас).

9

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

Погрався 20 хвилин (найдовше зайняло встановлення).

myframe.h
#ifndef MYFRAME_H
#define MYFRAME_H

#include <QFrame>
#include <QTextEdit>

class MyFrame : public QFrame
{
    Q_OBJECT
public:
    explicit MyFrame(QWidget * parent = nullptr);
    QTextEdit *m_text; //так-так-так, інкапсуляція і все таке, розбирайтеся самі
};

MyFrame& operator << (MyFrame& frame, int n);

#endif // MYFRAME_H
myframe.cpp
#include "myframe.h"

MyFrame::MyFrame(QWidget * parent) :
    QFrame(parent),
    m_text(new QTextEdit(this))
{
    m_text->setObjectName(QString::fromUtf8("text_object"));
    m_text->setGeometry(QRect(10,10,100,10));
}

MyFrame& operator << (MyFrame& frame, int n)//вкрай спрощений
{
    frame.m_text->setText(QString::number(n));
    return frame;
}
mainwindow.cpp
...
{
    ui->setupUi(this);
    *ui->frame << 5;//перенесіть куди буде зручно
}
...

Як ініціалізуються віджети, можна подивитися в автозгенерованому ui_mainwindow.h.
На форму додав звичайний фрейм, ПКМ - перетворити на - ім'я перетвореного класу MyFrame.

Подякували: andriymatiiv1

10

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

Дякую ще раз. Не підкажете в чому проблема(роблю так як ви)https://replace.org.ua/uploads/images/9039/acdb3bec142be5e5c7681f4baa0e0864.jpg

11 Востаннє редагувалося wander (15.04.2019 10:22:32)

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

andriymatiiv написав:

роблю так як ви

Але ж ви і брешете, подивіться уважніше на код який вам скинули і те, що у вас написано.

P.S. - витріть собі екран ))

12

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

По-перше, в тому, що замість скріншотів ви використовуєте камеру телефону.
По-друге, що ви некоректно внесли ініціалізацію всередину конструктора.

13

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

Сильно вибачаюсь. Справді мій провтик. Не судіть строго будь-ласка.Р.С. це так бліки від сонця, а екран протертий пару днів назад був)

14

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

Не треба вибачатися, ви нам нічого не завинили.
Цікава форма бліків трохи правіше вказівника мишки. Ніби їх хтось пальцем витер... :)

15

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

koala написав:

Цікава форма бліків трохи правіше вказівника мишки. Ніби їх хтось пальцем витер... :)

Новий вид бліків, називається - порох (не той, що головнокомандувач). :)

16

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

Ахах. Ну визнаю, порох. І ще. А щоб додати ще елементи до фрейму, треба далі в такому виді продовжувати писати? Як підв'язати? Через кому, я так розумію, не проходить.

17

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

Пане, це звичайний синтаксис C++.

Подякували: andriymatiiv1

18

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

Я просто уточнив)

19

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

Пишіть у будь-якому звичному для вас виді. Але перед тим, як учити різні розширення, бажано базовий синтаксис вивчити. Якщо у вас із цим проблеми - то будь ласка, розберемося, але без Qt. А то виходить "мені треба інтеграл взяти, а я точно не певен, як через десяток переносити".

20 Востаннє редагувалося andriymatiiv (15.04.2019 13:36:15)

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

Дякую звичайно, але я вже розібрався. Проблема була в тому, що я не правильно "розшифрував" скинутий код. Тепер трохи його переробив, зрозумів суть і все ок. Працює так, як я і хотів(по завданню). Щиро дякую за допомогу.