Название: Как получить значение переменной главного окна?? Отправлено: PavelVX от Август 25, 2011, 12:39 Добрый день!
Сильно извиняюсь за ламерский вопрос, но что-то запутался :( Переделываю пример про доквиджет приложение. В mainwindow.h сделал public tvar; В mainwindow.cpp создаю док окно. QDockWidget *dock = new QDockWidget(tr("Customers"), this); MyWidget = new MyWidget(dock); dock->setWidget(MyWidget); addDockWidget(Qt::RightDockWidgetArea, dock); tvar = 123; Как мне потом, в методах MyWidget получить tvar??? MyWidget->parent()->parent()->tvar - ругается, что в общем-то правильно :) Название: Re: Как получить значение переменной главно Отправлено: pokidoff от Август 25, 2011, 12:46 А как насчет в классе MyWidget описать метод void setTVAR(int & tvar)?
По-другому ты никак не доберешься до нее. Название: Re: Как получить значение переменной главного окна?? Отправлено: PavelVX от Август 25, 2011, 12:51 Все. конец рабочего дня, походу где-то торможу, но если честно, то не понял, зачем :)
Поясню, что я хочу. При определенных действиях MyWidget должен проверить открыт ли другой виджет, и если открыт, то послать ему сигнал, обновить данные. Название: Re: Как получить значение переменной главного окна?? Отправлено: GreatSnake от Август 25, 2011, 13:08 Код
Название: Re: Как получить значение переменной главного окна?? Отправлено: Странник от Август 25, 2011, 15:47 зачем MyWidget что-то проверять? пусть шлет сигнал в любом случае. если другой виджет существует - он его примет и сам уже решит, обновлять ему данные или нет.
Название: Re: Как получить значение переменной главного окна?? Отправлено: PavelVX от Август 26, 2011, 07:19 GreatSnake, огромное спасибо! век живи, век учись :)
Странник, вы как всегда правы! Слоты/сигналы именно для этого и сделаны. Но как тогда правильнее реализовать архитектуру? Условия: 1. основное окно, через него открываются все док-виджеты. 2. док-виджет, форма информации о клиентах 3. док виджет, форма информации об операциях клиентов. Первоначально открываем форму информации о клиентах. При смене клиента генерим сигнал. Потом открываем информацию об операциях. Привязываем слот изменения клиента с сигналом об этом. В данном варианте все просто. А если я открою все формы наоборот, то как это делать? Слот же я не могу привязать к пустому указателю! А потом этому указателю присвоить значение на новую форму. Название: Re: Как получить значение переменной главного окна?? Отправлено: Странник от Август 26, 2011, 09:00 не знаю, стоит ли такие окна размещать в доках, но вам виднее. коннект, разумеется, надо делать, когда обе формы уже созданы. просто в главном окне, когда создаете форму клиентов, проверяете, существует ли форма операций. если существует - коннектите сигнал-слот. ну и наоборот, если при создании формы операций уже существует форма клиентов - коннектите. при удалении одной из форм соединение разрывается автоматически, поэтому повторных коннектов не будет.
Название: Re: Как получить значение переменной главного окна?? Отправлено: PavelVX от Август 26, 2011, 11:00 именно так и сделал, а на вопрос с повторными коннектами вы уже дали ответ.
Название: Re: Как получить значение переменной главного окна?? Отправлено: PavelVX от Август 26, 2011, 12:29 а никто не подскажет, почему не генерируется сигнал destroy?:
Код: QDockWidget *dock = new QDockWidget(tr("MyDock"), this); Название: Re: Как получить значение переменной главного окна?? Отправлено: Странник от Август 26, 2011, 12:46 док-виджет при закрытии не уничтожается, судя по всему. соответственно, и ваш виджет тоже. можно попробовать:
Код: QDockWidget *dock = new QDockWidget(tr("MyDock"), this); |