![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
maxvanceffer |
![]()
Сообщение
#11
|
![]() Студент ![]() Группа: Участник Сообщений: 72 Регистрация: 30.5.2009 Из: Moldova Пользователь №: 790 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
А можно маленикй пример ... А что то туго как то доходит.
Вот пример : это в классе первого окна обьява Second *window; в реализации первого класса : window=new Second(this); а вот во втором классе как к этому обратиться через this? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#12
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
maxvanceffer |
![]()
Сообщение
#13
|
![]() Студент ![]() Группа: Участник Сообщений: 72 Регистрация: 30.5.2009 Из: Moldova Пользователь №: 790 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Раскрывающийся текст namespace Ui { class SettingDialog; } class SettingDialog : public QDialog { Q_OBJECT Q_DISABLE_COPY(SettingDialog) public: explicit SettingDialog(QWidget *parent = 0); virtual ~SettingDialog(); void initVars(QString SettingFile); protected: virtual void changeEvent(QEvent *e); private: Ui::SettingDialog *m_ui; void startup(); int Changes; QString Settings; QMessageBox *mes; private slots: void on_exitButton_clicked(); void on_autoLoginCheckBox_stateChanged(int ); void on_popupCheckBox_stateChanged(int ); void on_saveButton_clicked(); signals: void closeEvent(); }; |
|
|
BRE |
![]()
Сообщение
#14
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
А можно маленикй пример ... А что то туго как то доходит. Вот пример : это в классе первого окна обьява Second *window; в реализации первого класса : window=new Second(this); а вот во втором классе как к этому обратиться через this? Если я правильно понял вопрос, то ты хочешь из Second получить доступ к родительскому окну?
Сообщение отредактировал BRE - 13.6.2009, 22:19 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#15
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
1) Один вариант тебе написал BRE.
2) Второй вариант, как и первый, только убрать приведение типа, и вызывать метод show (приведение не нужно т.к. это родной метод QWidget) Т.к. у тебя второе окно наследник от QDialog, то могут быть ещё два варианта: 3) Перед вызовом твоего диалога, соедени его сигнал void finished ( int result ) со слотом show первого окна. 4) А может стоит пользоваться модальным диалогом? Я сильно сомневаюсь, что основное окно будет мешать пользователю. А вот исчезновение главного окна а потом появление, т.е мелькание окон, явно его выведет из равновесия. signals: вот это зря. с таким именем, хоть и с другой сигнатурой, уже есть функция у базового класса (QWidget). Лучше придумай другое имя.
void closeEvent(); |
|
|
BRE |
![]()
Сообщение
#16
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
2) Второй вариант, как и первый, только убрать приведение типа, и вызывать метод show (приведение не нужно т.к. это родной метод QWidget) Метод parent описан в QObject и соответственно возвращает указатель на QObject. Приведение типа все равно нужно, правда приводить можно к QWidget. Цитата QObject * QObject::parent () const
|
|
|
maxvanceffer |
![]()
Сообщение
#17
|
![]() Студент ![]() Группа: Участник Сообщений: 72 Регистрация: 30.5.2009 Из: Moldova Пользователь №: 790 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Ура всем спосибо получилась по примеру BRE , пытался соединять раньше сигна со слотом из главного в ребёнка но не срабатывала. Но по совету BRE получилось !!! Еще поиграюсь сразными возожнастями .... щас читаю статейку об этом....
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#18
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Метод parent описан в QObject и соответственно возвращает указатель на QObject. Пардон, я недосказал:Я имел в виду указатель на родителя parent, передаваемый в конструктор, вместо метода parent() см. код maxvanceffer в 13 сообщении. Но, как я и говорил - это способ для данного конкретного случая. У BRE - универсальный.
|
|
|
SABROG |
![]()
Сообщение
#19
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Если я правильно понял вопрос, то ты хочешь из Second получить доступ к родительскому окну?
Q_ASSERT ничего не пишет в консоль при release сборке, в любом случае программа продолжит своё выполнение и выпадет по AV. Кстати достаточно написать так Q_ASSERT(wnd);, но в любом случае это только лишь warning в debug сборке. |
|
|
BRE |
![]()
Сообщение
#20
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Q_ASSERT ничего не пишет в консоль при release сборке, в любом случае программа продолжит своё выполнение и выпадет по AV. Она и не должна ничего писать в релизе, такие ошибки должны выявляться на этапе отладки. Кстати достаточно написать так Q_ASSERT(wnd); Свой код я так и пишу, никогда не делаю сравнение с 0. Либо if( wnd ), либо if( !wnd ). Но это вопросы стиля написания, у каждого свои предпочтения. ![]() но в любом случае это только лишь warning в debug сборке. Это варнинг и abort. |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 8.12.2023, 12:01 |