Здравствуйте!
Есть простая задача - нужно из основного окна открыть небольшое модальное окно, ввести в нем пару строк, при нажатии OK передать данные в основное окно и закрыть это модальное окно.
Я делаю так. Вот код основного окна.
mainwindow.hclass mainwindow : public QMainWindow, public Ui::MainWindow
{
...
private slots:
// Слот, в котором вызывается модальное окно (вызывается из контекстного меню)
void recordview_add_new_context(void);
public slots:
// Слот для приема данных из модального окна
void recordview_add_new(QString name, QString text);
...
};
mainwindow.cpp...
// Слот для открытия окошка добавления новой записи в таблицу
void mainwindow::recordview_add_new_context(void)
{
qDebug() << "In slot recordview_add_new_context()";
addnewrecord addnewrecordwin;
connect(&addnewrecordwin, SIGNAL(signal_recordview_add_new(QString name, QString text)),
this, SLOT(recordview_add_new(QString name, QString text)));
addnewrecordwin.exec();
}
// Слот добавления новой записи в таблицу коннечых записей
void mainwindow::recordview_add_new(QString name, QString text)
{
qDebug() << "In slot recordview_add_new()";
// Получение ссылки на модель таблицы конечных записей
recordtablemodel *model=(recordtablemodel *)recordview->model();
// Вставка данных в модель
model->insert_new_record(name,text);
}
...
А вот код модального окна
addnewrecord.hclass addnewrecord : public QDialog, public Ui::addnewrecordform
{
Q_OBJECT
private slots:
// Слот, вызыващийся при нажатии Ok
void accept(void);
signals:
// Сигнл для пересылки введенных данных.
// Реалиацию сигнала делать не нужно, надо только описать его, и затем вызвать через emit
void signal_recordview_add_new(QString name, QString text);
public:
// Конструктор окна
addnewrecord( QWidget * parent = 0, Qt::WFlags f = 0 );
};
addnewrecord.cppaddnewrecord::addnewrecord( QWidget * parent, Qt::WFlags f) : QDialog(parent, f)
{
setupUi(this);
}
void addnewrecord::accept(void)
{
qDebug() << "In slot accept class addnewrecord";
// Отправляются введенные пользователем данные
emit signal_recordview_add_new(recordname->text(),recordtext->toHtml());
// Закрывается окно
this->setAttribute(Qt::WA_DeleteOnClose);
this->close();
}
При запуске программы модальное окно открывается, можно ввести данные, при нажатии на OK появляется debug-строка "
In slot accept class addnewrecord". И дальше должна появиться строка "
In slot recordview_add_new()", которая бы свидетельствовала что данные приняты. Но она не появляется, т.е. данные не передаются в слот recordview_add_new().
Вопрос - что не так сделано, и как можно исправить?