Q:

Qt. Передача данных между двумя классами

Есть два окна. В одном окне LineEdit, в другом - PushButton. Как при нажатии кнопки передать ее надпись в LineEdit? Думал это все дело реализовать через указатель, но не вышло...
Класс первого окна (с LineEdit)
#ifndef WINDOW_H
#define WINDOW_H

#include <QDialog>
#include <QLineEdit>

#include "table.h"

class Table;

class Window : public QDialog
{
    Q_OBJECT

public:
    Window(QWidget *parent = 0);
    ~Window();

    Table *table;
    QLineEdit *edit;

};

#endif // WINDOW_H

Его методы:
#include "window.h"

Window::Window(QWidget *parent): QDialog(parent)
{
    table = new Table;
    table->show();

    edit = new QLineEdit(this);
}

Window::~Window()
{

}

Класс второго окна (с кнопкой):
#ifndef TABLE_H
#define TABLE_H

#include <QDialog>
#include <QPushButton>

#include "window.h"

class Window;

class Table : public QDialog
{
    Q_OBJECT

public:
    Table(QWidget *parent = 0);
    ~Table();

    QPushButton *btn;
    Window *ptr;
private slots:
                void Slot();

};

#endif // TABLE_H

Его методы:
#include "table.h"

Table::Table(QWidget *parent) : QDialog(parent)
{
    btn = new QPushButton(this);
    btn->setText("Ok");
    connect(btn, SIGNAL(clicked(bool)), this, SLOT(Slot()));

}

Table::~Table()
{

}

void Table::Slot()
{
    ptr->edit->setText(btn->text());
}

A:

Можно у первого окна объявить сигнал textChanged(QString). Примерно так:
class FirstWindow : public QWidget{
    Q_OBJECT       
public:
    FirstWindow(QWidget *parent = 0):
        QWidget(parent)
    {
        QPushButton *button = new QPushButton("button"); 
        connect(button, SIGNAL(clicked(bool)), SLOT(_textChanged()));
    }
signals:
    void textChanged(const QString &text) const;
private slots:
    void _textChanged() const{
        QPushButton *button = qobject_cast<QPushButton*>(sender());

        if(!button){
            return;
        }

        emit textChanged(button->text());
    }
};

А у второго окна объявить слот setText(QString), который будет устанавливать текст в lineEdit:
class SecondWindow : public QWidget{
    Q_OBJECT       
    QLineEdit *_lineEdit;
public:
    FirstWindow(QWidget *parent = 0):
        QWidget(parent),
        _lineEdit(new QLineEdit)
    {}
public slots:
    void setText(const QString &text){
        _lineEdit->setText(text);
    }
};

А теперь там, где вы создаете эти окна, соедините эти сигнал и слот:
FirstWindow *firstWindow = new FirstWindow;
SecondWindow *secondWindow = new SecondWindow;
connect(firstWindow, SIGNAL(textChanged(QString)), secondWindow, SLOT(setText(QString)));

В принципе должно работать и так, но реализацию FirstWindow можно сделать немного более красивой если воспользоваться классом QSignalMapper:
class FirstWindow : public QWidget{
    Q_OBJECT       
public:
    FirstWindow(QWidget *parent = 0):
        QWidget(parent)
    {
        QSignalMapper *mapper = new QSignalMapper(this);
        connect(signalMapper, SIGNAL(mapped(QString)), SIGNAL(textChanged(QString)));

        QPushButton *button = new QPushButton("button");
        mapper->setMapping(button, button->text());
        connect(button, SIGNAL(clicked(bool)), mapper, SLOT(map())); 
    }
signals:
    void textChanged(const QString &text) const;
};

