Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Cerbere от Сентябрь 29, 2011, 22:36



Название: Обмен данными между формами
Отправлено: Cerbere от Сентябрь 29, 2011, 22:36
Добрый день!

Допустим есть основное окно программы, есть отдельное окно (форма) для ввода настроек для основной программы.

Как передать около 10 значений формы в основную программу? Для каждого контрола ввода создавать сигнал-слот?


Название: Re: Обмен данными между формами
Отправлено: Rem Norton от Сентябрь 29, 2011, 22:54
Не обязательно. Можно так:

Допустим на форме есть виджеты типа QLineEdit  в количестве 10 штук (edLine1, edLine2, ... , edLine10)

В объявлении "отдельно окна для ввода настроек" пшем типа:
Код
C++ (Qt)
class QSettingsDlg: public QDialog, public Ui::QSettingsDlg{
...
 

потом в слоте основного окна:
Код
C++ (Qt)
QString s1;
QString s2;
...
...
QString s10;
QSettingsDlg dlg(this);
if (dlg.exec() == QDialog::Accepted)
{
 s1 = dlg.edLine1.text();
 s2 = dlg.edLine2.text();
 ...
 s10 = dlg.edLine10.text();
}
 

Суть ясна?


Название: Re: Обмен данными между формами
Отправлено: Cerbere от Сентябрь 29, 2011, 23:05
Да, ясно. Спасибо, попробую!

Что, если много разных типов элементов управления? Просто для каждого типа контролов делать такую обработку? Или есть еще более универсальный способ обмена данными?


Название: Re: Обмен данными между формами
Отправлено: Rem Norton от Сентябрь 29, 2011, 23:14
Все-таки суть не уловил. Поясняю:
Когда создается класс формы, то при применении множественного публичного наследования все виджеты на форме доступны из родительского класса.
Т.е. в данном случае, если пишем:
Код
C++ (Qt)
class QSettingsDlg: public QDialog, public Ui::QSettingsDlg{
 

то в том месте, где вызывается этот самый QSettingsDlg, будут доступны все его виджеты. И не важно, какого они типа.

P.S. Или это я чего-то недопонял... Задача стоит как: по кнопке (ну или другому событию) поднять диалог настроек и получить оттуда кучу данных?


Название: Re: Обмен данными между формами
Отправлено: andrew.k от Сентябрь 30, 2011, 00:48
Если я правильно тебя понял, то ты все правильно понял. Теперь тебе остается только это осознать и обдумать.
Norton тебе уже дал решение, которое тебя интересует. Изучи его.
И не стоит называть свои собственные классы с буквы Q.


Название: Re: Обмен данными между формами
Отправлено: Andrew Vladoff от Октябрь 04, 2011, 20:40
Можно делать проще. Объявить глобальные переменные и через class QSettings писать /читать их. Для меня так так наглядней


Название: Re: Обмен данными между формами
Отправлено: andrew.k от Октябрь 05, 2011, 09:36
А можно еще писать в файл или отправлять по сети.   ;D
Не говори глупости.


Название: Re: Обмен данными между формами
Отправлено: Andrew Vladoff от Октябрь 05, 2011, 20:21
Цитировать
А можно еще писать в файл или отправлять по сети.   
Не говори глупости.
не понимаю чем плох вариант сохранения настроек в реестре или в ini файле? Вызвал окно настроек, при закрытии его сохранил настройки и всё.


Название: Re: Обмен данными между формами
Отправлено: Rem Norton от Октябрь 05, 2011, 21:42
Цитировать
А можно еще писать в файл или отправлять по сети.   
Не говори глупости.
не понимаю чем плох вариант сохранения настроек в реестре или в ini файле? Вызвал окно настроек, при закрытии его сохранил настройки и всё.
Не крутою Надо ini-шник хранить на файловом хосте в архиве под паролем. Самое то!!!
Это был стёб, а если серьезно, то не зачем усложнять простые вещи.


Название: Re: Обмен данными между формами
Отправлено: andrew.k от Октябрь 05, 2011, 22:02
Цитировать
А можно еще писать в файл или отправлять по сети.   
Не говори глупости.
не понимаю чем плох вариант сохранения настроек в реестре или в ini файле? Вызвал окно настроек, при закрытии его сохранил настройки и всё.
Вопрос был не в том, как сохранять настройки.
Прочитай название темы. И ответ уже был дан.