Пересылка текста из одной формы в таблицу другой

Только начал рассматривать qt, нам дали архив с проектом, моя задача была в том, чтобы сделать добавление подразделов по кнопке в отдельной форме, доп.форму сделал, кнопку тоже, но не пойму как передавать значение из поля addEdit в столбец главной формы подраздел. Справа кнопка добавить подраздел

По нажатию на кнопку добавить подраздел открывается форма Dobavlenie

void MainWindow::on_pushButton_clicked()
{
   dob = new Dobavlenie(this);
   dob->show();
}

В этой форме по нажатию на кнопку OK текст введенный в поле должен записаться в столбец подразделение из главной формы.

void Dobavlenie::on_buttonBox_rejected()
{
    close();
}

void Dobavlenie::on_buttonBox_accepted()
{
    ui->addEdit->text();
    close();
}

введите сюда описание изображения

В главной форме есть метод создания таблицы, соответственно, думаю работать нужно с ним:

void MainWindow::addToTable(CWorker *wr)
{
    ui->TableWidget->setRowCount(ui->TableWidget->rowCount() + 1);

    QTableWidgetItem *newItem;
    newItem = new QTableWidgetItem();
    newItem->setText(wr->GetLastName());
    ui->TableWidget->setItem(ui->TableWidget->rowCount() - 1, 0, newItem);

    newItem = new QTableWidgetItem();
    newItem->setText(wr->GetFirstName());
    ui->TableWidget->setItem(ui->TableWidget->rowCount() - 1, 1, newItem);

    newItem = new QTableWidgetItem();
    newItem->setText(wr->GetMiddleName());
    ui->TableWidget->setItem(ui->TableWidget->rowCount() - 1, 2, newItem);

    newItem = new QTableWidgetItem();
    newItem->setText(QString::number(wr->GetAccountNumber()));
    ui->TableWidget->setItem(ui->TableWidget->rowCount() - 1, 3, newItem);

    newItem = new QTableWidgetItem();
    newItem->setText(wr->GetSubDivision());
    ui->TableWidget->setItem(ui->TableWidget->rowCount() - 1, 4, newItem);

    newItem = new QTableWidgetItem();
    newItem->setText(wr->GetPosition());
    ui->TableWidget->setItem(ui->TableWidget->rowCount() - 1, 5, newItem);

    newItem = new QTableWidgetItem();
    newItem->setText(wr->GetWorkExperience());
    ui->TableWidget->setItem(ui->TableWidget->rowCount() - 1, 6, newItem);

}

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

Автор решения: Alexander Chernin

Добавьте в Dobavlenie сигнал:

class Dobavlenie : public QWidget {
    Q_OBJECT
signals:
    void sectionText(QString text);
    ...

И тогда в методе обработки клика эмитируйте его:

void Dobavlenie::on_buttonBox_accepted()
{
    emit sectionText(ui->addText->text());
    close();
}

Теперь вы можете отлавливать этот сигнал:

void MainWindow::on_pushButton_clicked()
{
   dob = new Dobavlenie(this); // Где-то надо указатель удалить. Гемор? Гемор. Идем дальше
   connect(dob, &Dobavlenie::sectionText, [&](QString text) {
       // Добавить text в таблицу
   });
   dob->show();
}

НО! Лучше наследуйте Dobavlenie от QDialog и тогда ваш код существенно упростится и сократится:

// Создайте его через редактор с двумя кнопками
class Dobavlenie: public QDialog {
...
public:
    QString text() const {
        return ui->addText->text();
    }

}

И тогда:

void MainWindow::on_pushButton_clicked()
{
    Dobavlenie dialog;
    if (dialog.exec() == QDialog::Accepted) {
        QString sectionText = dialog.text();
        //...
    }
}
→ Ссылка