Russian Qt Forum
Ноябрь 24, 2024, 20:44
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Указатель на родительский объект
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Указатель на родительский объект (Прочитано 4678 раз)
redbaron
Гость
Указатель на родительский объект
«
:
Июль 14, 2013, 14:51 »
Всем доброго времени суток.
У меня следующий вопрос.
Возможно, я упускаю что-то совершенно простое, но всё же...
В некоторых примерах официальной документации при создании собственного класса в конструкторе передаётся указатель на родительский объект, необходимый для конструктора наследуемого класса и создании иерархии объектов.
Например, в заголовочном файле:
class ClassWizard : public QWizard
{
Q_OBJECT
public:
ClassWizard(QWidget *parent = 0);
......
А затем в определении класса:
ClassWizard::ClassWizard(QWidget *parent)
: QWizard(parent)
.....
Но в некоторых случаях указатель не передаётся. Например:
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
.....
MainWindow::MainWindow()
{
.....
Хотя конструктор QMainWindow так же, как и QWizard, принимает параметр указателя на родительский объект, здесь это не делается. Почему?
Заранее спасибо.
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Указатель на родительский объект
«
Ответ #1 :
Июль 14, 2013, 15:11 »
если не вызывать конструктор базового класса, то будет автоматически вызван его конструктор по умолчанию. в данном случае это будет QMainWindow(0).
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
redbaron
Гость
Re: Указатель на родительский объект
«
Ответ #2 :
Июль 14, 2013, 16:40 »
Цитата: kambala от Июль 14, 2013, 15:11
если не вызывать конструктор базового класса, то будет автоматически вызван его конструктор по умолчанию. в данном случае это будет QMainWindow(0).
Да, это понятно, но вопрос в том, почему в одном случае их устраивает вызов по умолчанию, а в другом принципиален вызов с указателем?
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Указатель на родительский объект
«
Ответ #3 :
Июль 14, 2013, 18:03 »
в конструктор ClassWizard может быть передан параметр, а может быть и не передан (тогда будет 0), поэтому вызывают базовый конструктор явно. в MainWindow же конструктор и так без параметров, а значит ничего иного кроме как QMainWindow(0) вызвано быть не может.
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
redbaron
Гость
Re: Указатель на родительский объект
«
Ответ #4 :
Июль 14, 2013, 18:37 »
Цитата: kambala от Июль 14, 2013, 18:03
в конструктор ClassWizard может быть передан параметр, а может быть и не передан (тогда будет 0), поэтому вызывают базовый конструктор явно. в MainWindow же конструктор и так без параметров, а значит ничего иного кроме как QMainWindow(0) вызвано быть не может.
Ага. Понятно. Спасибо.
Просто интересны были доводы составителей.
В чём был смысл обреза MainWindow? Сэкономили? ))
Неужели указание родителя в нём было таким неприемлемым?
Чем, собственно говоря, ClassWizard или ClassDialog лучше MainWindow?
class MainWindow: public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget* parent)
.....
}
MainWindow::QMainWindow(QWidget* parent = 0) : QMainWindow(parent)
{....}
И что же здесь плохого?
«
Последнее редактирование: Июль 14, 2013, 18:41 от redbaron
»
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Указатель на родительский объект
«
Ответ #5 :
Июль 14, 2013, 19:30 »
ничего плохого нету, просто сэкономили несколько символов. хотя я предпочитаю всегда прописывать вызов базового конструктора.
как правило, QMainWindow является основным окном (окном верхнего уровня), которое создается в main(), поэтому родителя у него быть и не может.
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
redbaron
Гость
Re: Указатель на родительский объект
«
Ответ #6 :
Июль 14, 2013, 20:07 »
Цитата: kambala от Июль 14, 2013, 19:30
ничего плохого нету, просто сэкономили несколько символов. хотя я предпочитаю всегда прописывать вызов базового конструктора.
как правило, QMainWindow является основным окном (окном верхнего уровня), которое создается в main(), поэтому родителя у него быть и не может.
Фух, ну просто отлегло, спасибо большое. А то весь день промучился с этой заморочкой
А насчёт верхнего уровня - это просто мистика какая-то (хотелось бы всё же заглянуть в глаза хэлперам-документалистам), ибо даже в тех приложениях, где создаваемый объект на самом что ни на есть верхнем уровне, в конструкторах классов они прописывают указатель parent.
Как сказал бы Шарик из Простоквашино: "Потому что так красивее"
Ну, наверное, на всякий пожарный...
«
Последнее редактирование: Июль 14, 2013, 20:10 от redbaron
»
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Указатель на родительский объект
«
Ответ #7 :
Июль 14, 2013, 20:19 »
Цитата: redbaron от Июль 14, 2013, 20:07
А насчёт верхнего уровня - это просто мистика какая-то (хотелось бы всё же заглянуть в глаза хэлперам-документалистам), ибо даже в тех приложениях, где создаваемый объект на самом что ни на есть верхнем уровне, в конструкторах классов они прописывают указатель parent.
просто пишут конструкторы с такой же сигнатурой, какая и в базовом классе — по-моему это правильно. к тому же, никто не запрещает делать QMainWindow дочерним окном.
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
thechicho
Гость
Re: Указатель на родительский объект
«
Ответ #8 :
Июль 14, 2013, 22:06 »
//хотелось бы всё же заглянуть в глаза хэлперам-документалистам
в ноги им кланяйся лучше.
и, попробуй такие вопросы им задавать на почту. когда узнают, что ты с рашки, возможно вспомнят роман Достоевского "Идиот"
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...