BT
Borz TorkoyШілде 12, 2016, 1:22 Т.Қ.

Возвращение функцией ряда целочисленных значений и передача их в QPlainTextEdit

int, QPlainTextEdit, Qt, QVector, бинарное дерево

По сути весь вопрос описан в заголовке. Мне нужно описать метод класса, который возвращал бы ряд интов, а потом эти числа вывести в QPlainTextEdit
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

10
Evgenii Legotckoi
  • Шілде 12, 2016, 1:37 Т.Қ.

Не совсем ясно, в каком виде хранятся все эти переменные типа int, но допустим метод будет возвращать QVector с пачкой этих переменных, поскольку возвращать сразу пачку переменных int нужно либо в виде массива, либо в виде каких-либо контейнеров, например, QVector, что будет правильно и удобно…

То предлагаю для разбора вопроса следующий пример:
mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include "someclass.h"
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
 
private:
    Ui::MainWindow *ui;
};
 
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    SomeClass some;
    foreach (int number, some.getVectorInt()) {
        ui->plainTextEdit->insertPlainText(QString::number(number) + " ");
    }
}
 
MainWindow::~MainWindow()
{
    delete ui;
}

someclass.h
Это некоторый класс с тем самым неким методом. Допустим, в нём формируется Vector с пачкой переменных int.

#ifndef SOMECLASS_H
#define SOMECLASS_H
 
#include <QVector>
 
class SomeClass
{
public:
    SomeClass();
    QVector<int> getVectorInt();
};
 
#endif // SOMECLASS_H

someclass.cpp

#include "someclass.h"
 
SomeClass::SomeClass()
{
 
}
 
QVector<int> SomeClass::getVectorInt()
{
    QVector<int> vector;
    vector.append(15);
    vector.append(14);
    vector.append(95);
    vector.append(1);
    return vector;
}

QPlainTextEdit был добавлен в графическом дизайнере, поэтому обращение к нему идёт через указатель на ui.
В результате работы кода в QPlainTextEdit в ряд будет 4 числа через пробел.

    BT
    • Шілде 12, 2016, 1:48 Т.Қ.
    А как сделать, чтоб при каждом вызове извне, вектор обновлялся, а когда происходит рекурсия он просто пополнялся?
      Evgenii Legotckoi
      • Шілде 12, 2016, 1:54 Т.Қ.

      Чтобы вектор извне пополнялся, нужно тогда держать отдельный вектор, то есть объявить его в качестве отдельного поля в заголовочном файле и написать какой-нибудь метод:

      void addToVector(int variable)
      {
          vector.append(variable)
      }

      Либо какое-либо иное решение обновления содержимого вектора. Вообще, для ответа на этот вопрос недостаточно входных данных. Что значит извне? При каких условиях выполняется рекурсия и т.д.
      Но что-то сдаётся мне, что раз уж речь пошла о рекурсии, то тут тем более нужно подробнее знать обо всех исходных данных.

        BT
        • Шілде 12, 2016, 2:03 Т.Қ.
        QVector<int> Tree::ExternalNode(TreeNode *t, int level)
        {	
            if(level == 0) _externalNodes.clear();
        	if(t != NULL)
        	{
                if((t->left == NULL) && (t->right == NULL)) _externalNodes.append(t->data);
                ExternalNode(t->left, level+1);
                ExternalNode(t->right, level+1);
        	}
        }

        У меня бинарное дерево, это метод, который возвращает значения внешних вершин дерева. Я добавил вектор, и добавил уровни, чтоб контролировать рекурсию. Думаю обновлять вектор, когда буду на нулевом уровне, и в начале входить в метод с нулевым уровнем.

          Evgenii Legotckoi
          • Шілде 12, 2016, 2:09 Т.Қ.
          А вот эта переменная _externalNodes и есть вектор, который объявлен в заголовочном файле?
            BT
            • Шілде 12, 2016, 2:13 Т.Қ.

            Да

             

              Evgenii Legotckoi
              • Шілде 12, 2016, 2:14 Т.Қ.
              • Жауап шешім ретінде белгіленді.

              По сути не хватает return. Думаю, что в данном случае он должен быть в конце метода.

              QVector<int> Tree::ExternalNode(TreeNode *t, int level)
              {	
                  if(level == 0) _externalNodes.clear();
              	if(t != NULL)
              	{
                      if((t->left == NULL) && (t->right == NULL)) _externalNodes.append(t->data);
                      ExternalNode(t->left, level+1);
                      ExternalNode(t->right, level+1);
              	}
               
                  return _externalNodes;
              }

               

                BT
                • Шілде 12, 2016, 2:17 Т.Қ.
                Да, просто не успел дописать))Все получилось, спасибо
                  BT
                  • Шілде 12, 2016, 2:18 Т.Қ.
                  А использование foreach приветствуется, я где-то читал, что лучше через for()?
                    Evgenii Legotckoi
                    • Шілде 12, 2016, 2:24 Т.Қ.
                    foreach – это Qt-шный макрос, который перебирает все элементы в контейнере. То есть он присутствует только в Qt. Он не является стандартом C++.
                    Но если проект пишется на Qt, то я не вижу смысла игнорировать такой полезный инструмент, как foreach. Тем более, что если проект начали писать на Qt, то там и так будет очень много специфичного для Qt.
                    Ну. Я пока не сталкивался с проблемами в производительности, поэтому за этот аспект не скажу.
                    Лично я предпочитаю использовать foreach там, где это возможно. Для меня код так выглядит чище.

                      Пікірлер

                      Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                      Кіріңіз немесе Тіркеліңіз
                      Г

                      C++ - Тест 001. Первая программа и типы данных

                      • Нәтиже:66ұпай,
                      • Бағалау ұпайлары-1
                      t

                      C++ - Тест 001. Первая программа и типы данных

                      • Нәтиже:33ұпай,
                      • Бағалау ұпайлары-10
                      t

                      Qt - Тест 001. Сигналы и слоты

                      • Нәтиже:52ұпай,
                      • Бағалау ұпайлары-4
                      Соңғы пікірлер
                      G
                      GoattRockҚыр. 3, 2024, 11:50 Т.Қ.
                      Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
                      d
                      dblas5Шілде 5, 2024, 9:02 Т.Қ.
                      QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                      k
                      kmssrАқп. 9, 2024, 5:43 Т.Ж.
                      Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                      АК
                      Анатолий КононенкоАқп. 5, 2024, 12:50 Т.Қ.
                      Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                      Енді форумда талқылаңыз
                      Evgenii Legotckoi
                      Evgenii LegotckoiМаусым 25, 2024, 1:11 Т.Ж.
                      добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                      F
                      FynjyШілде 22, 2024, 2:15 Т.Қ.
                      при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
                      BlinCT
                      BlinCTМаусым 25, 2024, 11 Т.Ж.
                      Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
                      BlinCT
                      BlinCTМамыр 5, 2024, 3:46 Т.Қ.
                      Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
                      Evgenii Legotckoi
                      Evgenii LegotckoiМамыр 3, 2024, 12:07 Т.Ж.
                      Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

                      Бізді әлеуметтік желілерде бақылаңыз