powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / определение стандартного конструктора класса наследуемого от другого класса
12 сообщений из 12, страница 1 из 1
определение стандартного конструктора класса наследуемого от другого класса
    #38596291
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет! Подскажите, пожалуйста, не понимаю код при создании стандартного конструктора для класса, наследуемого от другого класса(QMainWindow)

Код:
Код: plaintext
1.
2.
3.
4.
5.
6.
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}



То есть что значит
Код: plaintext
1.
2.
3.
{
    ui->setupUi(this);
}



я более менее понимаю(этот код устанавливает значение для Ui как ссылку на класс MainWindow. чтоб потом можно было обращаться к специфическим методам ui и полям класса, размещенным через дизайнер), а вот остальное нет.
Спасибо.
...
Рейтинг: 0 / 0
определение стандартного конструктора класса наследуемого от другого класса
    #38596308
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtusя более менее понимаю
Нет, не понимаешь. Этот конструктор создаёт совершенно новый экземпляр класса
Ui::MainWindow для каких-то своих внутренних нужд и вызывает процедуру его инициализации
(настройки) на себя.

Разработчики Qt много курили, видимо, чтобы изобрести это спагетти. Гораздо читабельнее
было бы унаследовать MainWindow от Ui::MainWindow. Или по крайней мере дать Ui::MainWindow
соответствующий конструктор, чтобы писать так:
Код: sql
1.
2.
3.
4.
5.
MainWindow::MainWindow(QWidget *parent) :
     QMainWindow(parent)
{
     ui = new Ui::MainWindow(this);
}


Или даже так (если сделать ui не предком, а простым мембером, что, впрочем, практически
одно и то же):
Код: sql
1.
2.
3.
4.
5.
MainWindow::MainWindow(QWidget *parent) :
     QMainWindow(parent),
     ui(this)
{
}


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
определение стандартного конструктора класса наследуемого от другого класса
    #38596399
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял, но не совсем.

авторЭтот конструктор создаёт совершенно новый экземпляр класса
Ui::MainWindow для каких-то своих внутренних нужд и вызывает процедуру его инициализации
(настройки) на себя.

Это я так понимаю относится к этому участку:
Код: plaintext
1.
2.
3.
4.
ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}




авторГораздо читабельнее
было бы унаследовать MainWindow от Ui::MainWindow

А это разные классы? Я просто думал, что Ui - это пространство имен.
...
Рейтинг: 0 / 0
определение стандартного конструктора класса наследуемого от другого класса
    #38596410
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtus,

ui->setupUi(this)

это вызов метода setupUi объекта ui класса Ui::MainWindow.
...
Рейтинг: 0 / 0
определение стандартного конструктора класса наследуемого от другого класса
    #38596414
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtusА это разные классы? Я просто думал, что Ui - это пространство имен.

Да. И в этом пространстве может быть совсем другоая MainForm.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
определение стандартного конструктора класса наследуемого от другого класса
    #38596424
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

подразобрался теперь. Спасибо за подробные объяснения.
...
Рейтинг: 0 / 0
определение стандартного конструктора класса наследуемого от другого класса
    #38596560
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Ты неправ, с qt более менее все в порядке.
...
Рейтинг: 0 / 0
определение стандартного конструктора класса наследуемого от другого класса
    #38596569
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovГораздо читабельнее
было бы унаследовать MainWindow от Ui::MainWindow.
http://stackoverflow.com/questions/17237152/inheriting-a-mainwindow-class-from-qmainwindow-and-ui-mainwindow
:)
...
Рейтинг: 0 / 0
определение стандартного конструктора класса наследуемого от другого класса
    #38596719
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К тому же надо отметить, что классов в иерархии много, а ui у них всех один.
...
Рейтинг: 0 / 0
определение стандартного конструктора класса наследуемого от другого класса
    #38596808
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил http://stackoverflow.com/questions/17237152/inheriting-a-mainwindow-class-from-qmainwindow-and-ui-mainwindow
Какая-то там невнятная дискуссия: "ИИ креатора не нравится множественное наследование", "я
не знаю почему, но это не работает", "слишком большие заголовочные файлы получатся". Баг в
среде, кривой дизайн библиотеки и исконная ахиллесова пята С выдаются за оправдания
мутного кода.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
определение стандартного конструктора класса наследуемого от другого класса
    #38596848
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
MainWindow::MainWindow(QWidget *parent) : // объявление сигнатуры этого конструктора
    QMainWindow(parent),  // инициализация предка QMainWindow, с помощью конструктора с одним параметром, типа QWidget *, передавая туда параметр parent в качестве значения
    ui(new Ui::MainWindow) // инициализация члена данного класса с именем ui , значением new Ui::MainWindow
{
   // некий код инициализации

    ui->setupUi(this); // вызов функции setupUi объекта ui
}
...
Рейтинг: 0 / 0
определение стандартного конструктора класса наследуемого от другого класса
    #38596870
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
очень хорошее объяснение. Спасибо большое!
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / определение стандартного конструктора класса наследуемого от другого класса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]