![]() |
|
|
![]()
|
|
| dmitrio |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Изучаю QT за одно и C++. Так скажем самопальный новичек в C++. Вот не могу понять как правильно создавать конструкторы классов и указывать в них родителя??
В данное время создаю экземпляр QWizard Файл mainwindow.h
Файл mainwindow.cpp
Файл wizard.h
Файл wizard.cpp
Я так понимаю все дело в объявлении класса Wizard в конструкторе, но не могу понять что указывать в конструкторе, уже опробовал много вариантов. Сейчас работает так: открывается главное окно, потом вылазит окно мастера. Если закрыть главное окно, окно мастера остается открытым, но хотелось бы чтобы оно тоже закрылось. Я так понимаю тут дело в не правильном parent? Спасибо за помощь |
||||||||
|
|||||||||
| kosmonaFFFt |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
1) Нет, тебе надо отловить событие главного окна, и закрыть в рбработчике дочернее...
2) Надо для родителя указывать не QWidget*, а QObject* 3) создавать так
желательно в деструкторе сделать
-------------------- ![]() |
||||
|
|||||
| dmitrio |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Спасибо, буду пробовать
|
|||
|
||||
| dmitrio |
|
||||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Уважаемый kosmonaFFFt, сделал как Вы сказали, что получилось:
1) Заменил:
на
Получилось что мастер стал встроенный в главное окно. 2) Заменил везде где стоит:
на
В файлах .h и .cpp Компилятор стал ругаться и выдает:
Что не так делаю? Это сообщение отредактировал(а) dmitrio - 24.8.2011, 06:06 |
||||||||||
|
|||||||||||
| dmitrio |
|
||||||||||||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Вроде бы немного разобрался, замена с QWidget на QObject в конструкторах выдавала кучу ошибок, вернул обратно.
Оставил:
Но окно Wizarda было как будто вросшим в MainWindow Когда-то помнится ставил флаг для wizard
убрал его и о чудо, окно мастера стало нормальным и закрывается сразу после того как закрывается главное окно. Но без вопросов конечно никак. 1) Я так понимаю раз окно мастера закрывается после закрытия главного окна значит оно в памяти не оседает? Но по хорошему наверное деструктор все-таки делать надо? Видимо у меня еще хорошие проблемы с областью видимости переменных ну и много в чем, поэтому прошу помощи: В объявлении класса MainWindow (mainwindow.h) в секции private я объявляю:
В конструкторе класса MainWindow (mainwindow.cpp) я указываю:
В объявлении класса Wizard (wizard.h) я указываю:
В конструкторе класса Wizard (wizard.cpp) я указываю:
В деструкторе класса Wizard:
На что само собой понятно компилятор ругается:
В чем не правда, поставьте пожалуйста на путь истинный Или я не там где надо создаю объект wiz, или я не там где надо создаю деструктор или ... 2) Как управлять видимостью главного окна пока в зоне видимости Wizard? Ну например что бы в главном не работали менюшки и т.д Делаю в главном:
но оно мне главное и мастера делает с такими параметрами |
||||||||||||||||||
|
|||||||||||||||||||
| dmitrio |
|
||||||||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
1) Нашел в интернетах (понятно что ответ есть в любой книге по С++) что если объект создается именно с this, то при удалении родителя он удалится тоже:
т.е правильно создавать так:
а не так:
2) Пока управлением видимостью главного окна решил управлением видимостью виджетов на главном окне Тут меня озадачили новые вопросы. Вопросы до сих пор связаны с QWizard. Я хочу сделать простейший сбор информации с qwizardpage 1 и дальнейший вывод ее на qwizardpage 2. Делаю так: Конструктор Qwizard:
Конструктор onePage:
Конструктор twoPage:
Проверка правильности введенного имени в twoPage:
Конструктор третьей страницы:
Смысл в том, что при запуске этого кода сразу появляется на экране пустой QMessageBox::warning из threePage, если его закрываем то появляется главное окно и окно мастера. Я понимаю, что конструктор это инициализация всего содержимого и видимо оно из-за этого и получается так. Но никак не пойму как мне сделать то, что я хочу, т.е 1) проверить правильность ввода имени 2) сделать setField для этого имени, если оно правильное и 3)в следующем qwizardpage вывести на экран с помощью field значение сохраненное при помощи setField |
||||||||||||||
|
|||||||||||||||
| dmitrio |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Спасибо всем за участие, разобрался, оказывается надо использовать initializePage и будет нам счастье, если будут еще вопросы по qwizard буду задавать сюда (хотя есть ли смысл
Это сообщение отредактировал(а) dmitrio - 30.8.2011, 15:06 |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |