Russian Qt Forum
Ноябрь 25, 2024, 15:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Статус виджета на другой форме  (Прочитано 6650 раз)
Wander
Гость
« : Март 04, 2009, 10:52 »

Можно проверить из главной формы, что там с виджетом на другой форме Непонимающий

Например, на другой форме есть CheckBox или comboBox нужно проверить - включен флажок или нет или какой текст сейчас в выпадающем списке Непонимающий

Так можно?
Записан
spirit
Гость
« Ответ #1 : Март 04, 2009, 10:56 »

распривать нутро другого виджета и передавай на него указатель, но, имхо, это неверно. либо сделать френдовую связь. лучше враперов накатать.
« Последнее редактирование: Март 04, 2009, 10:58 от spirit » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Март 04, 2009, 11:07 »

В Qt используется другой подход: Слоты и сигналы, при изменении состояния флажка посылается сигнал, соедени его с нужным слотом.
Записан

Юра.
spirit
Гость
« Ответ #3 : Март 04, 2009, 11:12 »

В Qt используется другой подход: Слоты и сигналы, при изменении состояния флажка посылается сигнал, соедени его с нужным слотом.
это частный случай. всю инфу в этом случае через sender получить можно. но как я понял нужно одновременно получить доступ к виджетам, т.е. есть метод в котором нужно проверить не только флажки, но и получить (тут же) строку из лайнэдита.
« Последнее редактирование: Март 04, 2009, 11:59 от spirit » Записан
Wander
Гость
« Ответ #4 : Март 04, 2009, 11:44 »

Я так понял -  изящно и просто проверить, что лежит в другой форме нельзя.
Тода как же реализуют в приложениях форму "Свойств/Опций" программы Непонимающий
Когда юзер выставил опции, то как же проверять какие там опции (или делать все в одной форме?).
Или же мне записывать все в текстовый файл, а потом из главной формы читать этот файл Непонимающий

   
Записан
spirit
Гость
« Ответ #5 : Март 04, 2009, 11:47 »

зачем? для опций обычно создают дилог. этот далог вызывают в главном окне. затем
Код
C++ (Qt)
...
if (!dialog.exec())
  return;
//считываем опции.
 
Записан
Wander
Гость
« Ответ #6 : Март 04, 2009, 11:50 »

Ой - ой - а можно поподробнее, как считать опции (ведь опции это всего текстовые метки в соответствии к которым что-то меняется)
Записан
spirit
Гость
« Ответ #7 : Март 04, 2009, 11:58 »

ну я ж говорил, при помощи враперов. допустим есть на форме 2 лайнэдита и два чекбокса, то код будет приблизительно таким
Код
C++ (Qt)
class Dialog: public QDialog
{
  Q_OBJECT
...
public:
   QString lineEditText1() const { return m_leLineEdit1->text(); }
   QString lineEditText2() const { return m_leLineEdit2->text(); }
 
   bool flag1() const { return m_cbCheckBox1->isChecked(); }
   bool flag2() const { return m_cbCheckBox2->isChecked(); }
 
private:
   QLineEdit *m_leLineEdit1;
   QLineEdit *m_leLineEdit2;
 
   QCheckBox *m_cbCheckBox1;
   QCheckBox *m_cbCheckBox2;
};
...
if (!dialog.exec())
  retrun;
...
const QString text1 = dialog.lineEditText1();
const QString text2 = dialog.lineEditText2();
bool flag1 = dialog.flag1();
bool flag2 = dialog.flag2();
...
 

а если надо сохранить эти настройки, то можно либо перегрузить метод accept() диалога и все сохранять в файл, либо же в сохранять в виджете (после exec()) в окне, которое вызывает твой диалог.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #8 : Март 04, 2009, 12:09 »

а можно и подругому, некий виджет (форма, например) предоставляет интерфейс к настройкам себя, и по сути, ты вызываешь диалог либо предоставляемый этим виджетом, либо в чужем дмалоге высвечивается список свойств, который определенным образом предоставляет настраиваемый виджет (например выдет QMap, который редактирует пользователь).

А вот над интерфейсом надо самому подумать.
Записан

Юра.
spirit
Гость
« Ответ #9 : Март 04, 2009, 12:12 »

можно и так. тогда можно заюзать QObject::setProperty/property
Записан
Wander
Гость
« Ответ #10 : Март 04, 2009, 12:22 »

У меня куча ошибок полезло  Плачущий

Если не трудно  - конечно же, исходники все бы решили.
А то я тут вам голову морочу.
 
Записан
BRE
Гость
« Ответ #11 : Март 04, 2009, 12:39 »

Например так. Есть главное окно и несколько окошек с опцями:
Код
C++ (Qt)
class MainWindow : public QMainWindow
{
   ....
private:
   FirstOptionWidget      *m_firstOptions;
   SecondOptionWidget *m_secondOptions;
};
 
// Доступ к опциям
void MainWindow::changedFirstOption()
{
  bool o1 = m_firstOptions->options1;
  QString option2 = m_firstOptions->strintOption();
 
  m_firstOptions->setData( "text" );
}
 

Еще в окнах опций можно сделать сигнал, который будет посылаться при изменении одной из опций или сделать кнопку "Обновить" и ловить его в MainWindow, выбирать нужные параметры и обновляться.
Записан
spirit
Гость
« Ответ #12 : Март 04, 2009, 12:40 »

ну смотри, перегружаешь accept в своем диалоге. в этом методе сетаешь состояние всех своих веджетов через setProperty. затем в вызывающем окне получаешь значения через property. можно их запихнуть в QMap<QString, QVaraint> и потом сохранить в файл (если нужно конечно). получить список всех свойст, которые были динамически добавлены можно через QList<QByteArray> QObject::dynamicPropertyNames () const. получится очень гибкая реализация.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.179 секунд. Запросов: 23.