Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: sibmail от Январь 17, 2011, 17:45



Название: как обратиться к виджету другой формы?,
Отправлено: sibmail от Январь 17, 2011, 17:45
упрощенно: у меня есть главное окно, на нем лежит textedit и кнопка, по кнопке я открываю другую форму (диалог), при этом работа идет в другом диалоге, но мне надо из этого диалога установить текст на textedit главного окна (или прочитать от туда)....

если не понятна суть - мизирный проект прикреплен

архив сюда не смог прикрепить
вот ссылка http://disk.tom.ru/u8jc3v3/1/7cf9a/2.rar



Название: Re: как обратиться к виджету другой формы?,
Отправлено: GreatSnake от Январь 17, 2011, 17:53
Dialog::Dialog(QWidget *parent) : QDialog(parent)
{
   MainWindow* mw = qobject_cast<MainWindow* >( parent );
   . . .
}


Название: Re: как обратиться к виджету другой формы?,
Отправлено: sibmail от Январь 17, 2011, 18:12
спасибо! пошло!


Название: Re: как обратиться к виджету другой формы?,
Отправлено: sergun1604 от Январь 18, 2011, 11:09
Я через сигнал-слот все решаю


Название: Re: как обратиться к виджету другой формы?,
Отправлено: sibmail от Февраль 03, 2011, 09:37
не совсем пошло ))). у меня ситуация перевести код с 3 на 4.

qt3:
главное окно:
MainFormImpl::MainFormImpl(QWidget *parent, const char *name, WFlags f):MainForm(parent,name,f)
{....}

диалог: *.h
class AcceptMessage : public AcceptMessageForm
{
    Q_OBJECT
public:
   AcceptMessage (QWidget *parent = 0, const char *name = 0,WFlags f = 0); //,WFlags fl = WDestructiveClose
   MainFormImpl* mf;
....
}
cpp:
AcceptMessage::AcceptMessage(QWidget *parent, const char *name,WFlags f):AcceptMessageForm(parent,name,f)
{
   mw = (MainFormImpl*) parent;
           mw->.... и т.д. используем везде и как угодно )

....} 

но в qt4 ругается на *.h
 error: ISO C++ forbids declaration of 'MainFormImpl' with no type
 error: expected ';' before '*' token

как еще прописать то?
MainWindow* mw = qobject_cast<MainWindow* >( parent ) помогает только в рамках конструктора, а мне еще надо бы в других функциях (слотах) использовть mw...


Название: Re: как обратиться к виджету другой формы?,
Отправлено: alexman от Февраль 03, 2011, 10:09
1. ; ставь в описании классов.
2.
Цитировать
диалог: *.h
Добавь в начале class MainFormImpl;


Название: Re: как обратиться к виджету другой формы?,
Отправлено: SASA от Февраль 03, 2011, 10:22
Про переход с 3 на 4 не знаю.
Про другой виджет.
Мне кажется, что немного неправильная архитектура. Формы, диалоги должны отображать/изменять данные. У Вас открывается диалог, который меняет какие-то данные. Данные рассылают сигнал, что данные изменились, и все формы, которые отображают эти данные, перерисовываются.


Название: Re: как обратиться к виджету другой формы?,
Отправлено: sibmail от Февраль 03, 2011, 10:44
1. ; ставь в описании классов.
2.
Цитировать
диалог: *.h
Добавь в начале class MainFormImpl;

1. не понял где конкретно ставить
2. спасибо!! помогло !!! (сам тупанул - походу переработался...)