Как увидеть передаваемую переменную из одной формы в другую в описанной функции?

Есть несколько классов. В одном из классов объявлена функция, в которой ведётся обработка данных и возвращает результат:

QStringList MainWindow::Output()
{
    QStringList result;
    выполнение функции...;
    return result;
}

Далее в этом же классе вызывается вторая форма:

void MainWindow::on_action_triggered()
{
    ...
    table window(Output());
    ...
}

и на вторую форму передаётся переменная с результатом обработки функции Output.

На второй форме: h:

...
public:
    explicit table(QStringList result, QWidget *parent = nullptr);
    ~table();
...

cpp:

...
table::table(QStringList result, QWidget *parent) :
    QDialog(parent),
    ui(new Ui::table)
{
    ui->setupUi(this);
    ...
}

И вот проблема, получается, что на второй форме (.cpp) я могу работать с переменной result только в конструкторе.

Подскажите, пожалуйста, как можно работать с данной переменной по всей области исходника, например, объявить функцию и указать там эту переменную.

Спасибо.


Ответы (2 шт):

Автор решения: gbg

Главное правило работы с формами в Qt - создавать их динамически.

Второе правило работы с Qt - использовать сигналы и слоты для обмена данными между формами.

Работать это может как-то так:

class FormAlpha
{
signals:
   void doFormBeta(const QString& data1,const QString&  data2,const QString&  data3);
};


FormAlpha::actionWonder()
{
    doFormBeta("pip", "pop", "bop");
}

class FormBeta
{
public slots:
   void proceedFormBeta(const QString& data1,const QString&  data2,const QString&  data3)
    {
         //do all business
    }
};

Обе формы создать динамически, соединить их сигнал и слот - и получится аккуратно.

auto alpha = new FormAlpha();
auto beta = new FormBeta();

connect(alpha, SIGNAL(doFormBeta(тут параметры)), beta, SLOT(processFormBeta(тут параметры)));

Код очень условный (без IDE писать на Qt, как оказалось, тяжеловато), но надеюсь, идею вы извлечете.

→ Ссылка
Автор решения: Alex Rebell

В заголовке (.h) создать ещё одну переменную в области private:, например: QStringList data;, и в конструкторе (.cpp), в теле указать data=result;. Теперь переменную data можно увидеть по всей области класса.

→ Ссылка