C/C++

В QtCreator для Qt 4.8 (и 5 может также), у класса формы главной, функция конструктор, делает не понятное наследование?

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow){}
То есть функция MainWindow относится к классу MainWindow, и компилятор это посчитает конструктором.
Но, там сделан стиль наследования (насколько известно, что применим только для классов и структур), то есть функция сделана "какой-то" отнаследованной. От QMainWindow(переменная parent), и ui(Объект MainWindow, (видимо это зеркало this)).
Пользуюсь уже Qt4 почти год, параллельно VS, и до "сих пор", это "пугает".
Это не наследование, это вызов конструкторов предков.
Андрей Абэ
Андрей Абэ
99 198
Лучший ответ
>То есть функция MainWindow относится к классу MainWindow, и компилятор это
> посчитает конструктором.
Возможно потому, что это и есть конструктор

> Но, там сделан стиль наследования (насколько известно, что применим только для классов и структур),
Возможно потому, что MainWindow - это и есть класс

> ...то есть функция сделана "какой-то" отнаследованной. От QMainWindow(переменная parent)
Класс MainWindow, имеющий конструктор (внезапно) MainWindow унаследован от Qt'шного класса QMainWindow

>и ui(Объект MainWindow, (видимо это зеркало this)).
Чё?

Qt-шная форма, в данном случае MainWindow.ui прекомпилируется в свой собственный класс Ui_MainWindow. В этом классе создаются все дочерние элементы формы, чтобы к ним можно было как-то обращаться, еще в нём создаётся пара методов, настраивающих свойства всех этих контролов, чтобы все было описано на c++ и в то же время соответствовало форме. Дальше мок-компилятор делает пространство Ui, в котором создаёт новый класс MainWindow, который наследует от Ui_MainWindow.

Класс MainWindow, в котором и нужно писать прикладной код формы, создаёт экземпляр этого самого класса из неймспейса Ui под именем ui. К текущему классу MainWindow этот класс (Ui::MainWindow) и его экземпляр ui не имеет отношения.

> Пользуюсь уже Qt4 почти год, параллельно VS, и до "сих пор", это "пугает".
Рекомендую почитать основы языка; там где про конструкторы, наследование и все такое.
Ринат Габбасов Чуть про динамику.
Вообще возможно сделать наслендование от QMainWindow, чтобы все доработки (функции), в форме каждой, не дублировать? Или эта динамика не даёт этого сделать.
Денис Мамонтов На вопрос вам уже ответили, однако очень интересно, что заставляет пользоваться Qt4.8 в 2021 году?